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()
你好,在上面的代码中,我想要对三个不同的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
,这样就不会发生这种情况。