使用matplotlib绘制水平线

2024-05-23 16:22:32 发布

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

我使用样条插值来平滑时间序列,还想在绘图中添加一条水平线。但似乎有一个问题是我无法控制的。任何帮助都会很有帮助的。以下是我所拥有的:

annual = np.arange(1,21,1)
l = np.array(value_list) # a list with 20 values
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
plt.plot(xs,spl(xs),'b')

plt.plot([0,len(xs)],[40,40],'r--',lw=2)
pylab.ylim([0,200])
plt.show()

问题似乎在于我使用[0,len(xs)]绘制水平线。


Tags: 绘图lenplotnp时间plt序列spl
3条回答

你在找axhline(一条水平轴线)。例如,下面将给出y=0.5的水平线。

import matplotlib.pyplot as plt
plt.axhline(y=0.5, color='r', linestyle='-')
plt.show()

sample figure

如果要在轴上绘制水平线,也可以尝试^{}方法。您需要在数据坐标中指定y位置和xminxmax(即x轴上的实际数据范围)。示例代码段是:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 21, 200)
y = np.exp(-x)

fig, ax = plt.subplots()
ax.plot(x, y)
ax.hlines(y=0.2, xmin=4, xmax=20, linewidth=2, color='r')

plt.show()

上面的代码片段将在轴的y=0.2处绘制一条水平线。水平线从x=4开始,到x=20结束。生成的图像是:

enter image description here

你说得对,我想是[0,len(xs)]把你甩了。您需要重用原始的x轴变量xs,并用另一个长度与您的变量相同的numpy数组绘制它。

annual = np.arange(1,21,1)
l = np.array(value_list) # a list with 20 values
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
plt.plot(xs,spl(xs),'b')

#####horizontal line
horiz_line_data = np.array([40 for i in xrange(len(xs))])
plt.plot(xs, horiz_line_data, 'r--') 
###########plt.plot([0,len(xs)],[40,40],'r--',lw=2)
pylab.ylim([0,200])
plt.show()

希望这能解决问题!

相关问题 更多 >