python-matplotlib -- 如何将多个图表结合为一个 - 生存函数的正确使用

0 投票
1 回答
2031 浏览
提问于 2025-04-17 05:57
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()

你好,在上面的代码中,我想要对三个不同的c值进行循环,然后生成一张图,显示这三个数据的曲线。我现在做不到这一点!它只显示了一条曲线。还有,我使用了stats.norm.sf这个函数,它给出了生存函数,得到的图是正确的,但我希望y轴的值从0到1,而现在显示的值却是从10e-300到10e-10!

1 个回答

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()

顺便说一下:这个图会把相同的值用三种不同的颜色画三次。我想在你的实际代码中,你会改变 cn,这样就不会发生这种情况。

撰写回答