如何限制matplotlib中的图形不低于零

2024-06-03 07:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在为学校做编程项目。目标是用图表模拟弹道,包括风阻

我已经达到了我的目标,只想补充一些细节。一个细节是限制图形,使其不低于零(因为显示地面以下的投射物路径没有多大意义)。我希望matplotlib在f(x)时立即停止绘制图形<;0.

然而,我不知道该怎么做。我注意到我使用x=np.linespace(0,10000,500)设置了x的范围。如果图形在x轴上低于0或高于10000,它将在0和/或10000处被截断。我如何为y做同样的事情

这是我的密码:

import matplotlib.pyplot as plt
import numpy as np

*bunch of variables*

x = np.linespace(0, 10000, 500)
y = *formula for ballistic trajectory*
y_0 = 0 * x 

*labels and titles*
plt.grid()
plt.xlim(0)
plt.ylim(0)
plt.plot(x, y)
plt.plot(x, y_0, color="black")
plt.show

Tags: 项目import图形目标plotmatplotlibas编程
2条回答

如果将下限和上限都传递给plt.ylim(),则曲线将仅显示在这些限制之间的位置。话虽如此,仅将下限设置为零,至少应确保显示的曲线不低于零,因此我不确定问题的原因

在任何情况下,这里都有一个完整的示例,可以按预期工作:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 30, 500)
y = 25 * x - x ** 2 
y_0 = 0 * x 

plt.grid()
plt.xlim(0, 30)
plt.ylim(0, 160)
plt.plot(x, y)
plt.plot(x, y_0, color="black")

trajectory plot

应在创建绘图后设置限制。如果不想,则无需设置最大值

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 30, 500)
y = 25 * x - x ** 2 

plt.grid()
plt.plot(x, y)
plt.ylim(0, None) # Or similarly "plt.ylim(0)"
plt.show()

enter image description here

注意:您还可以在绘图之前设置类似plt.ylim(0, 170)的内容。但是,如果不使用plt.ylim(0)设置最大值,那么最大值将被设置为默认值1。最终得到的是一个截断的绘图。这就是为什么需要在绘图后设置它

评论后的补充回答

要使用y<0删除数据点,可以执行以下操作:

x = x[y>0]
y = y[y>0]
plt.grid()
plt.plot(x, y)
plt.show()

相关问题 更多 >