matplotlib绘图仅最后一个Y值正常其余均显示为0,打印数据正确如何解决?
问题原因
- 你生成的
theta数组最后一个值为精确的$\pi/2$,此时$\cos(\pi/2)$趋近于0,导致计算得到的Y数组最后一个元素是极小的负异常值(数量级约为$-10^{33}$),和其他Y值的个位数量级差距极大。 - 调用
plt.ylim(top=max(Y),bottom=min(Y))时,y轴范围被这个异常值拉到了极大的跨度,所有正常Y值在这个跨度下几乎和Y=0齐平,就出现了你看到的“除最后一个点外其他Y值都显示为0”的现象。
修复方案
方案1:避免生成边界异常值
生成theta数组时不包含$\pi/2$端点,修改对应代码即可:
theta=np.linspace(0,0.5*math.pi,n_iter, endpoint=False)
方案2:设置轴范围时排除异常值
如果需要保留原theta数组,计算轴上下限时跳过最后一个异常值:
plt.ylim(top=max(Y[:-1]),bottom=min(Y[:-1]))
额外优化建议
可以用numpy向量化运算替换for循环,代码更简洁、运行效率更高,计算结果和原循环完全一致:
# 直接替换整个for循环块即可 Y = np.tan(theta)*x - g/(2*(v*np.cos(theta))**2)*x**2 + y0
内容的提问来源于stack exchange,提问作者Naughty Witcher
相关产品推荐
相关产品推荐

