我该如何使用matplotlib绘制类似于gnuplot中的“with impulses”的样式?

4
我想使用Python / Pandas / Matplotlib创建类似下图的绘图。上部分没有问题,但我无法让下面这样的绘图工作。在gnuplot中我可以做到,相应的绘图风格是“with impulses”。Matplotlib是否支持此功能?如果Matplotlib不支持此功能,是否有其他可用的Python图形软件包?

The gnuplot style for the lower clip is 'with impulses'


看起来你可以通过使用子图生成两个共享x轴的图表来获得这个结果,其中上面的一个是普通的折线图,下面的一个是条形图。但是也许你应该解释一下这些值的理论,这样我们就不需要反向推导。如果你期望有人发布现成的代码,那么如果提供一个简单的数据示例会更容易些。 - sascha
每个时期都有两个下限值。新52周高点的股票数量和新低点的数量。新高点是正数,用绿色脉冲线绘制在零线上方,新低点是负数,用红色脉冲线绘制在零线下方。 - John
那个图表是由一个使用libpng的c程序创建的,所以我的示例代码不会很有用。我理解了上部剪辑和共享x轴的部分,但是我无法创建下部剪辑。 - John
如果你想要在Python中做到这一点,你可能有Python内部数据的访问权限。将它添加到你的问题中或生成一些具有可比行为的随机数据。当然,也有人可以发布没有这些的答案,但是动力会降低,并且可能会对那些数据做出不同的假设。另外:实现给定这个这个的问题是什么?后者是我的先前推荐。 - sascha
2个回答

7
创建这样的图表最简单的方法是使用 pyplot.stem。您可以在此处找到示例。
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.1, 6*np.pi, 50)
plt.stem(x, np.cos(x)+1, linefmt='g-', markerfmt=' ')
plt.stem(x, -np.sin(x)-1, linefmt='r-', markerfmt=' ', basefmt="gray")

plt.show()

在此输入图片描述

另一种选择是使用 pyplot.vlines


我不知道vlines非常有用! - heltonbiker
太棒了。谢谢! - John
@John,您现在已经拥有超过15个声望值,可以进行投票了。请随意为这个答案投票并接受它,谢谢 :-) 当有人回答我的问题时该怎么做 - piRSquared

1

这里是一个使用vlines的示例,正如@ImportanceOfBeingErnes所建议的那样,这引发了另一个问题。是否有一种解决方案比另一种更好?在某些方面更有效或更好?

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.1, 6*np.pi, 50)
plt.vlines(x, 0, np.cos(x)+1, color='g')
plt.vlines(x, 0, -np.sin(x)-1, color='r')
plt.show()

enter image description here


我选择使用vlines,因为在我的应用程序中它比stem绘图更快。完成后,我会发布一个完整的示例。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接