Построить горизонтальную линию с помощью matplotlib


я использовал сплайн-интерполяции для сглаживания временного ряда, а также хотел бы добавить горизонтальную линию в сюжет. Но, похоже, есть проблема, которая находится вне моей власти. Любая помощь будет очень полезна. Вот что у меня есть:

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)] для построения горизонтальных линий.

4   51  

4 ответа:

вы правы, я думаю [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()

надеюсь, что проблема решена!

вы ищете axhline (горизонтальная линия оси). Ниже будет дана горизонтальная линия при y = 0,5, например.

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

если вы хотите нарисовать горизонтальную линию в осях, вы также можете попробовать ax.hlines () метод. Вам нужно указать y постион и xmin и xmax в координате данных (т. е. ваш фактический диапазон данных по оси 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

хороший и простой способ для тех людей, которые всегда забывают команду axhline следующая

plt.plot(x, [y]*len(x))

в вашем случае xs = x и y = 40. Если len (x) большой, то это становится неэффективным, и вы действительно должны использовать axhline.