python-matplotlib — как объединить несколько графиков в один — правильное использование функции выживания

#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).