【问题标题】:How do I limit my graph from going below zero in matplotlib如何限制我的图表在 matplotlib 中低于零
【发布时间】:2020-07-29 17:12:33
【问题描述】:

我一直在为学校编写编程项目。目标是用图表模拟包括风阻在内的弹道轨迹。

我已经达到了我的目标,只是想添加一些细节。一个细节是限制图表,使其不会低于零(因为显示弹丸在地下的路径没有多大意义)。我希望 matplotlib 在 f(x)

但是,我不知道该怎么做。我注意到我使用 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

【问题讨论】:

    标签: python matplotlib pycharm


    【解决方案1】:

    如果您将下限和上限都传递给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")
    

    【讨论】:

      【解决方案2】:

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

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

      注意:您还可以在情节之前设置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()
      

      【讨论】:

      • 感谢您的回答!不幸的是,这并不能解决问题,因为图形仍然绘制在 0 以下。 plt.ylim() 和 plt.xlim() 仅移动相机视角,因此看起来图形不会低于零。如果您使用 matplotlib 提供的工具在图表中移动,您仍然会看到图表低于零。我希望不要在 f(x)
      • 那我们对“plotted”是什么意思有了不同的理解。 y<0 点确实存在。如果您真的想摆脱它们(但不确定为什么要这样做),您应该在 情节之前删除它们。 IE。减少xy numpy 数组,然后绘图。我更新了答案。
      • 成功了!谢谢你的回答。对不起,我的小误会,英语不是我的母语。我不想要任何负 y 值的原因是因为显示地下的弹丸路径没有任何意义。落地的瞬间,路径就完成了。弹丸击中地面后发生的任何事情都不是我项目的一部分。这就像显示一个图表,应该可视化从 1900 年到 2000 年人们的死亡率,并且在某些时候它会变成负值。
      猜你喜欢
      • 2014-11-20
      • 2013-01-08
      • 2015-07-31
      • 1970-01-01
      • 2020-02-28
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多