2015-10-28 37 views
30

私はスプライン補間を使って時系列を滑らかにし、プロットに水平線を追加したいと思います。しかし、私のグリップから外れている問題があるようです。どんな支援も本当に役に立ちます。ここで私が持っているものです。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)]の私の使用であると思われます。

答えて

7

あなたは正しいです、私は[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() 

うまくいけば問題は解決します。

+0

これは機能します。ありがとう! – Ibe

+2

これは機能しますが、特にデータに応じて非常に大きな配列を作成している場合は、特に効率的ではありません。このようにすれば、最初と最後の2つのデータポイントを持つほうが賢明になります。それでも、matplotlibにはすでに水平線専用の機能があります。 – BlivetWidget

114

あなたはaxhline(水平軸線)を探しています。次の例では、y = 0.5の水平線が得られます。

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

シンプルで機能します。 – Ibe

+3

ドキュメント:['axhline'](https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline) – handle

関連する問題