Как построить логарифмический граф с данными в Python? - PullRequest
0 голосов
/ 19 мая 2019

Ну, я действительно не знал, как правильно задать вопрос, но это вопрос. У меня есть код, который производит данные для меня. У меня есть 100 чисел Рейнольдса от 0.1 до 2017 года, и на каждом числе Рейнольдса будут значения напряжения сдвига для 10.000 элемента. Поэтому я хочу, чтобы числа Рейнольдса на оси x и мои значения напряжения сдвига (от 0,001 до 10) на оси y были логарифмическими, и эти 10.000 элементов будут точками на графике. Так что у меня будет 100.000 точек на графике.

В этом коде я создаю Re от 0,1 до 2017 и 10 значений напряжения сдвига элемента для каждого числа Рейнольдса. Таким образом, на 0,1 по оси X мне нужно 10 очков. Поэтому я искал это, но не мог понять это. Так как я могу это сделать?

n = np.random.normal(mean, sd, 100)
for i in range(0, 105):
    Re = 0.1 * (1.1**i)  
    B = e ** (-0.08 * Re) * (2.5 * np.log(Re) + 5.25) + 8.5 * (1 - e ** (-0.08 * Re))  
    C = 0.8+0.9*((e**(-0.08*Re)/(Re**2))+((1-e**(-0.08*Re))/(B**2)))**(-0.5)  
    F = 0.31*Re*e**(-0.1*Re)+1.8*e**(-0.88*d50/D)*(1-e**(-0.1*Re)) 
    A = F/C   
    for j in range(10):
        Dcbss = 0.52*math.tan(fi) / (((1 + (abs(n[j])*A))**2)*(1+(1/2.5)*((abs(n[j])*F)**2)*math.tan(fi)))


1 Ответ

1 голос
/ 19 мая 2019

Использовать график рассеяния .Для каждого числа Рейнольдса у вас есть n значений напряжения.Диаграмма рассеяния требует столько же значений x, сколько существует значений y, поэтому вам нужно создать последовательность значений x такой же длины, что и значения y.

x = [1,1,1,1]
y = [1,2,3,4]

Если у вас несколько множеств из х / у данных вы можете построить их вручную следующим образом:

x = [1,1,1,1]
y = [1,2,3,4]
plt.scatter(x,y)

x = [2,2,2,2]
y = [1.1,2.1,3.1,4.1]
plt.scatter(x,y)

plt.show()
plt.close()

Для вашего случая вы хотите накапливать значения x и y во внутреннем цикле, а строить их, когда внутреннийцикл завершается.

from matplotlib import pyplot as plt
for i in range(0, 105):
    x = []
    y = []
    Re = 0.1 * (1.1**i)  
    B = e ** (-0.08 * Re) * (2.5 * np.log(Re) + 5.25) + 8.5 * (1 - e ** (-0.08 * Re))  
    C = 0.8+0.9*((e**(-0.08*Re)/(Re**2))+((1-e**(-0.08*Re))/(B**2)))**(-0.5)  
    F = 0.31*Re*e**(-0.1*Re)+1.8*e**(-0.88*d50/D)*(1-e**(-0.1*Re)) 
    A = F/C   
    for j in range(10):
        Dcbss = 0.52*math.tan(fi) / (((1 + (abs(n[j])*A))**2)*(1+(1/2.5)*((abs(n[j])*F)**2)*math.tan(fi)))
        x.append(i)
        y.append(Dcbss)
    plt.scatter(x,y)
plt.show()
plt.close()

Из документов: The plot function will be faster for scatterplots where markers don't vary in size or color..Если это так, просто используйте .plot () и укажите форму маркера - plt.plot(x,y,'ro') вместо plt.scatter(x,y).


matplotlib.pyplot.scatter ()
matplotlib.pyplot.plot ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...