Matplotlib 一个“图形”,多个“轴”,一个“道具循环”`
这个著名的问题让我困惑不解 问题是在不同的子地块中获得不同的线条颜色, 像这样Matplotlib 一个“图形”,多个“轴”,一个“道具循环”`,matplotlib,Matplotlib,这个著名的问题让我困惑不解 问题是在不同的子地块中获得不同的线条颜色, 像这样 In [29]: import numpy as np ...: import matplotlib.pyplot as plt In [30]: fig, axes = plt.subplots(2,1)
In [29]: import numpy as np
...: import matplotlib.pyplot as plt
In [30]: fig, axes = plt.subplots(2,1)
In [31]: for ax in axes.flatten():
...: ax.plot((0,1), (0,1))
正如您所看到的,两条线都是蓝色的-我可以理解这是因为每个ax都有自己的prop_循环
我可以用显式的颜色名称来解决这个问题
In [44]: fig, axes = plt.subplots(2,1)
In [45]: for ax, short_color_name in zip(axes.flatten(), 'brgkyc'):
...: ax.plot((0,1), (0,1), short_color_name)
但是如果我尝试重用同一个cycler对象
In [47]: my_cy = plt.rcParams['axes.prop_cycle']
In [48]: for ax in axes.flatten():
...: ax.set_prop_cycle(my_cy)
...: ax.plot((0,1), (0,1))
我有两个子地块,有两条蓝线
在我的理解中,我想做的是不可能的,因为ax调用cycler返回一个itertools.cycle,然后根据需要实际生成kwargs,但我还是问,因为
Matplotlib中有比我的哲学所梦想的更多的东西
在我的提示下,我想提出
...
next_shared_style = plt.rcParams['axes.prop_cycle']().__next__
for i, ax in enumerate(axes):
ax.plot(x, y[i], **next_shared_style())
在哪里
plt.rcParams['axes.prop_cycle']是循环器对象,
plt.rcParams['axes.prop_cycle']返回一个itertools.cycle对象,并
next_shared_style=plt.rcParams['axes.prop_cycle']。uuu next_uuu是itertools.cycle对象的uu next_u方法。
每次调用nextmy\u cycle\u object\u作为由\u a\u cycler实例化的\u,都会返回一个参数字典,要正确地将该字典传递给pyplot绘图命令,我们只需将其解包,如中所示
plotx,y[i],**下一个共享样式
使用整个字典可以确保每个子地块在由prop_循环控制的所有属性上共享相同的循环。我的建议是,如果您只有一个艺术家来设计样式
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2,2)
cycler = plt.rcParams['axes.prop_cycle']()
for i, ax in enumerate(axes.flat):
ax.plot((0,1), (0,1), **next(cycler))
plt.show()
你想做什么?@ImportanceOfBeingErnest或多或少。。。除了你提到的问题的海报,我希望尽可能多地委托Matplotlib,但你的回答已经足够好了。谢谢。如果你只有一位艺术家需要创作,我可以问你为什么这么说吗?如果你使用**NextCycle为循环中的另一位艺术家创作,它将获得下一个风格,这可能不是我想要的,尽管我不确定这里需要什么。