一次绘制多条线,但都根据当前的循环器状态
Posted
技术标签:
【中文标题】一次绘制多条线,但都根据当前的循环器状态【英文标题】:Plot multiple lines at once, but all according to the current cycler state 【发布时间】:2016-06-22 12:23:42 【问题描述】:当我一次绘制三条线时,matplotlib 通过当前循环器的三个步骤进行采样,并赋予每个步骤自己的风格:
In [11]: x = linspace(0, 5, 50)
In [12]: y = vstack([x**2, x**3, x**4]).T
In [13]: plot(x, y)
Out[13]:
[<matplotlib.lines.Line2D at 0x7edfa9144550>,
<matplotlib.lines.Line2D at 0x7edfa9144b38>,
<matplotlib.lines.Line2D at 0x7edfa9144cf8>]
我可以使用plot(x, y, color="black")
将它们全部设为相同的颜色。但是,我不希望它们全黑。我希望每一行都尊重循环的当前(下一个)状态。
获取current state 充其量是很麻烦的。我可以扩展 x
并展平 y
以使所有三个都具有相同的样式:
In [54]: plot(vstack([x]*3).ravel(), y.T.ravel())
但这会创建一条连接三者的虚假线,因此它仅适用于绘制标记而不是线条的绘图样式。
有没有好办法告诉matplotlib我想用同一个循环状态画多条线?
【问题讨论】:
【参考方案1】:这里通过获取当前状态:(不愉快,但不太麻烦。)
In [94]: plt.plot(x, y[:,1:], c=plt.plot(x, y[:,0])[0].get_c())
【讨论】:
创意!这也为另一个挑战提供了解决方案,即在使用label=x
时如何获取正确的图例条目。以上是关于一次绘制多条线,但都根据当前的循环器状态的主要内容,如果未能解决你的问题,请参考以下文章