#python #matplotlib
#python #matplotlib
Вопрос:
pos=10000
c=0.1
trap1=trapping(pos,c) # instance of a class
mylabel=('c=0.1','c=0.01','c=0.001')
colors=('bo','ro','mo')
for i in range(3):
plot1d=trap1.steps1d(pos,c)
cn=stats.norm.sf(plot1d) #create the survival function
for label,color in zip(mylabel,colors):
plt.loglog(plot1d,cn,color,label=label)
plt.hold('on')
c*=0.1
plt.show()
Здравствуйте, в приведенном выше коде я пытаюсь выполнить итерацию для 3 разных значений c и создать один график, на котором будут показаны все 3 графика в нем.Я не могу заставить это работать правильно!Он показывает только один график.
Кроме того, я использую stats.norm.sf, который выдает функцию выживания, и график, который я получаю, правильный, но по оси y я хочу значения от 0 до 1, и это дает мне значения от 10e-300 до 10e-10!
Ответ №1:
In [44]: import scipy.stats as stats
In [45]: sf=stats.norm.sf
In [48]: np.log(sf(24))
Out[48]: -292.09872100320786
Следовательно, если plot1d
содержит значение около 24, то loglog
график функции выживания будет иметь отметку по оси y около 10e-292.
Если вы хотите, чтобы диапазон y варьировался от 0 до 1, то, похоже, вам не нужен loglog
график. Возможно, вы ищете график с логарифмической осью x. В этом случае используйте plt.semilogx
:
import scipy.stats as stats
import matplotlib.pyplot as plt
import numpy as np
pos=1000
c=0.1
# trap1=trapping(pos,c) #instance of class trapping
# plot1d=trap1.steps1d(pos,c) #use the method steps1d from class
plot1d=np.linspace(0,25,100)
mylabel=('c=0.1','c=0.01','c=0.001')
colors=('bo','ro','mo')
cn=stats.norm.sf(plot1d) #create the survival function
for label,color in zip(mylabel,colors):
# plt.loglog(plot1d,cn,color,label=label)
plt.semilogx(plot1d,cn,color,label=label)
plt.show()
PS: При этом одни и те же значения отображаются 3 раза разными цветами. Я предполагаю, что в вашем реальном коде вы будете меняться cn
, чтобы этого не произошло.
Комментарии:
1. Здравствуйте, я хочу, чтобы loglog был уверен. И я хочу для 3 значений c нарисовать один график.
2. Кроме того, plot1d содержит список значений.
3. С одной стороны, (1) нам нужен
loglog
график. С другой стороны, (2) мы хотим, чтобы ось y имела значения от 0 до 1. Когда мы создаемloglog
график, значения y опускаются до 10e-300. Следовательно, (я утверждаю) (3)plot1d
содержит значение около 24. Эти три факта противоречат друг другу. Мы не можем достичь (1) и (2), если (3) верно. Вам нужно либо изменить (1) на график нелогарифмического типа по оси y (например,semilogx
график), либо изменить значения вplot1d
, чтобы достичь (2).