关于python:是否可以重置Cycler对象

Is it possible to reset a Cycler object

如果lines1lines2的形状

1
2
 plt.plot(x, lines1, linewidth=3)
 plt.plot(x, lines2, linewidth=1)

我有一条蓝色,绿色,宽度等于3的红色线,宽度等于1的青色,紫色和黄色线。

因为lines1中的数据与lines2中的数据相连接。我要复制Cycler对象控制的线条颜色在两个plot之间,指示我有蓝色、绿色、红色线条、宽度=3,蓝色、绿色、红色线条=1,而在对线条之间有一个视觉连接(颜色)。

问题的对象是EDOCX1&8的性质,准确地说是EDOCX1&9的性质。

ZZU1

复制这个网站码到您的网站上以设置一个投票箱在您的网站上。


问问题意味着更好地理解问题,不是吗?

下面的陈述说明了这一点,

1
plt.gca().set_prop_cycle(plt.rcParams['axes.prop_cycle'])

甚至更简单,plt.gca().set_prop_cycle(None)见下文补遗。

matplotlib具有内部一致性…

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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]:

enter image description here给了我

补遗

最后我读了.set_prop_cycle()的文档字符串。

Set the property cycle for any future plot commands on this Axes.

1
2
3
set_prop_cycle(arg)  
set_prop_cycle(label, itr)  
set_prop_cycle(label1=itr1[, label2=itr2[, ...]])

Form 1 simply sets given Cycler object.
[...]
Parameters
arg : Cycler
Set the given Cycler.
Can also be None to reset to the cycle defined by the current style.
[...]

我的代码可以简化

1
2
3
plt.plot(x, y1, linewidth=3)
plt.gca.set_prop_cycle(None)
plt.plot(x, y2, linewidth=1)

plt.rcParams中的值是基础Cycler中的值,但Axes对象在该对象上持有对迭代器的引用(参见此处,它实际上是迭代器周围的itertools.cycle中的值,因此它永远不会耗尽)。

如果你在剧情中使用广播,那么你可以做一些类似的事情

1
2
3
4
5
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)

使用当前默认周期的子集

1
2
dflt_cy = plt.rcParams['axes.prop_cycle']
my_cy = cycler('lw', [1, 3]) * dflt_cy[:3]

(详情请参阅文档)将提供与上述相同的信息。

我的建议是,如果您可以一次循环一个数据,可以做一些更一般的事情:

1
2
3
4
5
6
from cycler import cycler
my_cycle = (cycler('lw', [1, 3] *
            cycler('color', ['b', 'g', 'r', 'c', 'm', 'y', 'k']))
fig, ax = plt.subplots()
for sty, data in zip(my_cycle(), my_data):
    ax.plot(x, data, **sty)