Постройте горизонтальную линию, используя 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)]
для горизонтальной линии.
Ответы
Ответ 1
Вы правы, я думаю, что [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()
Надеюсь, это исправляет проблему!
Ответ 2
Вы ищете ось (горизонтальная ось). Например, следующее даст вам горизонтальную линию при y = 0.5.
import matplotlib.pyplot as plt
plt.axhline(y=0.5, color='r', linestyle='-')
plt.show()
![sample figure]()
Ответ 3
Если вы хотите нарисовать горизонтальную линию на осях, вы можете также попробовать метод 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]()
Ответ 4
Хороший и простой способ для тех людей, которые всегда забывают командную axhline
:
plt.plot(x, [y]*len(x))
В вашем случае xs = x
и y = 40
. Если len (x) велико, это становится неэффективным, и вы действительно должны использовать axhline
.
Ответ 5
В дополнении к наиболее upvoted ответа здесь, можно также цепь axhline
после вызова plot
на pandas
DataFrame
.
import pandas as pd
(pd.DataFrame([1, 2, 3])
.plot(kind='bar', color='orange')
.axhline(y=1.5));
![enter image description here]()
Ответ 6
Вы можете использовать plt.grid
чтобы нарисовать горизонтальную линию.
import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import UnivariateSpline
from matplotlib.ticker import LinearLocator
# your data here
annual = np.arange(1,21,1)
l = np.random.random(20)
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
# plot your data
plt.plot(xs,spl(xs),'b')
# horizental line?
ax = plt.axes()
# three ticks:
ax.yaxis.set_major_locator(LinearLocator(3))
# plot grids only on y axis on major locations
plt.grid(True, which='major', axis='y')
# show
plt.show()
![random data plot example]()