,如果lines1
和lines2
的形状为(3,101)
plt.plot(x, lines1, linewidth=3)
plt.plot(x, lines2, linewidth=1)
我有一条宽度等于3的蓝色,绿色,红色线条,以及宽度等于1的青色,品红色和黄色线条。
由于lines1
中的数据与lines2
中的数据成对连接,
我想重置控制线路的Cycler
对象'两条plot
指令之间的颜色,以便我有蓝色,绿色,红色线条,宽度= 3,然后是蓝色,绿色,红色线条宽度= 1,并且两者之间存在视觉连接(颜色)线。
有问题的Cycler
对象是axes
的属性,恰好是prop_cycle
属性
In [28]: plt.rcParams['axes.prop_cycle']
Out[28]: cycler('color', ['b', 'g', 'r', 'c', 'm', 'y', 'k'])
是否可以重置此Cycler
对象?
答案 0 :(得分:2)
提出问题意味着要更好地理解问题,不是吗?
下面的陈述可以解决问题,
plt.gca().set_prop_cycle(plt.rcParams['axes.prop_cycle'])
<edit>
更简单,plt.gca().set_prop_cycle(None)
,请参阅下面的附录。</edit>
matplotlib
有内部一致性......
示例:
In [46]: %matplotlib
In [47]: import matplotlib.pyplot as plt
In [48]: import numpy as np
In [49]: x = np.linspace(0, 7, 101)
In [50]: y1 = np.array([np.sin(x+0.2*i*x) for i in range(2)])
In [51]: y2 = 0.9*y1+0.1
In [52]: plt.plot(x, y1.T, linewidth=3)
Out[52]:
[<matplotlib.lines.Line2D at 0x7f5118b759b0>,
<matplotlib.lines.Line2D at 0x7f5118b75b38>]
In [53]: plt.gca().set_prop_cycle(plt.rcParams['axes.prop_cycle'])
In [54]: plt.plot(x, y2.T, linewidth=1)
Out[54]:
[<matplotlib.lines.Line2D at 0x7f511a3bec50>,
<matplotlib.lines.Line2D at 0x7f5118b1e898>]
In [55]:
最后,我阅读了.set_prop_cycle()
在此
Axes
上为任何将来的绘图命令设置属性循环。set_prop_cycle(arg) set_prop_cycle(label, itr) set_prop_cycle(label1=itr1[, label2=itr2[, ...]])
表单1只设置给定的
Cycler
对象 [...]
的参数强>
arg :Cycler
设置给定的Cycler 也可以None
重置到当前样式定义的循环 [...]
我的代码可以变得更简单
plt.plot(x, y1, linewidth=3)
plt.gca.set_prop_cycle(None)
plt.plot(x, y2, linewidth=1)
答案 1 :(得分:1)
plt.rcParams
中的值是基础Cycler
,但Axes
个对象持有对该对象的迭代器的引用(请参阅here,它实际上是{{}在迭代器周围,所以它永远不会耗尽。)
如果您在剧情中使用广播,那么您可以执行类似
的操作itertools.cycle
使用当前默认周期的子集
fig, ax = plt.subplots()
ax.set_prop_cycle((cycler('lw', [1, 3] *
cycler('color', ['b', 'g', 'r']))
ax.plot(x, lines1)
ax.plot(x, lines2)
(有关详细信息,请参阅the docs)将为您提供与上述相同的内容。
如果你可以一次循环一个数据,我的建议是做一些更通用的事情:
dflt_cy = plt.rcParams['axes.prop_cycle']
my_cy = cycler('lw', [1, 3]) * dflt_cy[:3]