[python] 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)]가로 선 플로팅에 문제가있는 것 같습니다 .



답변

당신이 맞습니다, 나는 [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위치를 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. 생성 된 이미지는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


답변

사용 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호출 한 후 plotA의 pandasDataFrame.

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 = xy = 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()

랜덤 데이터 플롯 예