我试图在具有整数(1 ... 300)“列表”和一些“值”(浮点数)的图表上绘制一些垂直线。当x = [48]时,以下代码有效,但是当x设置为x = [48,83,155,292]时,以下代码:

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吗?

最佳答案

我们可以使用plot命令本身,而不是多次调用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)

10-07 16:40