使用matplotlib在python中设置ylim
我试图用以下代码绘制一个简单的图形:使用matplotlib在python中设置ylim,python,matplotlib,Python,Matplotlib,我试图用以下代码绘制一个简单的图形: import numpy as np import matplotlib.pyplot as plt import math # evenly sampled time at 200ms intervals t = np.arange(0., 60, .8) plt.semilogy((((1- np.exp(-t**2/13.94))*(0.000567*(7.78*(1-np.exp(-33**2/t**2))*np.exp(-t/8.76)+1
import numpy as np
import matplotlib.pyplot as plt
import math
# evenly sampled time at 200ms intervals
t = np.arange(0., 60, .8)
plt.semilogy((((1- np.exp(-t**2/13.94))*(0.000567*(7.78*(1-np.exp(-33**2/t**2))*np.exp(-t/8.76)+1.50*(1-np.exp(-31**2/t**2))*(np.exp(-t/111.27)-np.exp(-t/8.76)))*10**43))+((1-np.exp(-t**2/13.94))*0.000567*0.05*(np.exp(-t/111.27)-np.exp(-t/8.76))*10**43)), linewidth=2)
#plt.legend([r"$t_{r} \approx (11 - 1)\sqrt{(M_{c}/M_{ch})}d$", r"$t_{r} \approx (11+1)\sqrt{(M_{c}/M_{ch})}d$"], loc='upper right')
plt.ylim(10**39, 10**41)
plt.xlabel("Time (Days)", fontsize =13)
plt.ylabel("Luminosity (erg/s)", fontsize=13)
plt.show()
如果我注释掉plt.ylim(10**39,10**41)
part,代码就可以正常工作。但是如果不设置ylim,我在情节中有很多我不想要的空白。我收到的错误是:
bolo.py:14: RuntimeWarning: divide by zero encountered in divide
plt.semilogy((((1- np.exp(-t**2/13.94))*(0.000567*(7.78*(1-np.exp(-33**2/t**2))*np.exp(-t/8.76)+1.50*(1-np.exp(-31**2/t**2))*(np.exp(-t/111.27)-np.exp(-t/8.76)))*10**43))+((1-np.exp(-t**2/13.94))*0.000567*0.05*(np.exp(-t/111.27)-np.exp(-t/8.76))*10**43)), linewidth=2)
Traceback (most recent call last):
File "bolo.py", line 17, in <module>
plt.ylim(10**39, 10**41)
File "/home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/pyplot.py", line 1604, in ylim
ret = ax.set_ylim(*args, **kwargs)
File "/home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 3047, in set_ylim
bottom, top = mtransforms.nonsingular(bottom, top, increasing=False)
File "/home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/transforms.py", line 2751, in nonsingular
if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
bolo.py:14:RuntimeWarning:在divide中遇到被零除
plt.符号学(((1-np.exp(-t**2/13.94))*(0.000567*(7.78*(1-np.exp(-33**2/t**2))*np.exp(-t/8.76)+1.50*(1-np.exp(-31**2/t**2))*(np.exp(-t/111.27)-np.exp(-t/8.76))*10**43+((1-np.exp(-t**-2/13.94))-0.000567*
回溯(最近一次呼叫最后一次):
文件“bolo.py”,第17行,在
plt.ylim(10**39,10**41)
文件“/home/trina/anaconda2/lib/python2.7/site packages/matplotlib/pyplot.py”,第1604行,ylim格式
ret=ax.set_ylim(*args,**kwargs)
文件“/home/trina/anaconda2/lib/python2.7/site packages/matplotlib/axes/_base.py”,第3047行,在set_ylim中
底部,顶部=m变换。非奇异(底部,顶部,递增=假)
非奇异格式文件“/home/trina/anaconda2/lib/python2.7/site packages/matplotlib/transforms.py”,第2751行
如果(非np.isfinite(vmin))或(非np.isfinite(vmax)):
TypeError:输入类型不支持ufunc“isfinite”,并且无法根据强制转换规则“safe”将输入安全强制为任何受支持的类型
我不知道如何解决这个问题。谢谢你的建议。
我也附上情节,我没有ylim现在。
你应该这样做:
plt.ylim([float(10**39), float(10**41)])
上限和下限应该在列表或元组中传递,而不是作为单独的参数传递。此外,您的限制似乎太大,您需要手动将其转换为浮点类型。不幸的是,我仍然收到相同的错误。你能试着在你的终端上编译吗?谢谢!,解决我的问题。我刚才也想到了,我可以做这个'plt.ylim(math.pow(10,39),math.pow(10,40)),它是这样工作的@是的,我认为使用
math.pow()
或numpy.power()
更安全。