Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matplotlib 一个“图形”,多个“轴”,一个“道具循环”`_Matplotlib - Fatal编程技术网

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为循环中的另一位艺术家创作,它将获得下一个风格,这可能不是我想要的,尽管我不确定这里需要什么。