스플라인 보간법을 사용하여 시계열을 매끄럽게하고 플롯에 수평선을 추가하고 싶습니다. 그러나 내 그립에서 벗어난 문제가있는 것 같습니다. 도움이 정말 도움이 될 것입니다. 여기 내가 가진 것입니다 :
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)]
가로 선 플로팅에 문제가있는 것 같습니다 .
답변
당신이 맞습니다, 나는 [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
. 생성 된 이미지는 다음과 같습니다.
답변
사용 matplotlib.pyplot.hlines
:
y
단일 위치로 전달 될 수 있습니다.y=40
y
여러 위치로 전달 될 수 있습니다.y=[39, 40, 41]
- 당신은 같은과 그림을하려하는 경우
fig, ax = plt.subplots()
, 다음 교체plt.hlines
또는plt.axhline
과 함께ax.hlines
또는ax.axhline
각각. matplotlib.pyplot.axhline
단 하나의 위치를 플롯 할 수 있습니다 (예를 들어y=40
)
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(1, 21, 200)
plt.hlines(y=40, xmin=0, xmax=len(xs), colors='r', linestyles='--', lw=2)
plt.show()
답변
여기에 가장 upvoted 답변을뿐만 아니라, 하나는 체인 수 axhline
호출 한 후 plot
A의 pandas
의 DataFrame
.
import pandas as pd
(pd.DataFrame([1, 2, 3])
.plot(kind='bar', color='orange')
.axhline(y=1.5));
답변
항상 명령을 잊어 버린 사람들을위한 좋고 쉬운 방법 axhline
은 다음과 같습니다.
plt.plot(x, [y]*len(x))
귀하의 경우 xs = x
및 y = 40
. len (x)가 크면 비효율적이므로 실제로 사용해야 axhline
합니다.
답변
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()