2014-01-23 46 views
6

我想繪製一個有整數(1 ... 300)「列表」和一些「值」(浮動)的圖表上的一些垂直線。以下工作當x = [48],但是當x被設置爲x = [48,83,155,292],以下代碼:matplotlib axvline真相不明確或列表問題?

pylab.plot(list, values, label='Trend', color='k', linestyle='-') 
pylab.axvline(x, linewidth=1, color='g') 

生成此錯誤:

File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2053, in axvline 
    ret = ax.axvline(x, ymin, ymax, **kwargs) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3478, in axvline 
    scalex = (xx<xmin) or (xx>xmax) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

這是什麼意思? (我認爲python假裝知道什麼時候真相不明確是非常有趣的)。我能不能將一個列表傳遞給axvline?

回答

7

不,你不能通過一個列表axvline。對於一個行內的多個垂直線,這樣的事情會做

[pylab.axvline(_x, linewidth=1, color='g') for _x in x] 
1

axvline用於創建x 垂直線線。

在從y-min到y-max的certin x點處的含義。

x不能是list類型。

一個簡單的例子:

axvline(x=.5, ymin=0.25, ymax=0.75) 

你可以閱讀更多here

如果你想創建一個矩形,你可以使用:

axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs) 
你的情況XMIN

爲1和x男人是300.

2

而不是多次調用axvline我們可以使用繪圖命令本身,而是提供正確的轉換(這是如果有很多線快很多倍) :

import matplotlib.transforms as tx 
ax = pylab.gca() 
trans = tx.blended_transform_factory(ax.transData, ax.transAxes) 
pylab.plot(np.repeat(x, 3), np.tile([.25, .75, np.nan], len(x)), linewidth=2, color='g', transform=trans) 
+0

這應該是公認的答案。 –