Skip to main content
 首页 » 编程设计

python之为什么在设置其他一些属性循环时,轴颜色循环会减少为单一颜色

2025年05月04日20dflying

在 python/matplotlib 中:

当我设置“标记”属性循环(例如)时,颜色循环只产生一个恒定的(蓝色)颜色。请参见下面的示例。

from matplotlib import pyplot as plt 
import numpy as np 
 
fig, (ax1,ax2) = plt.subplots(nrows=2) 
 
ax1.set_prop_cycle(marker=['o','s','x','+','*']) 
 
xx = np.arange(10) 
for n in xx: 
  ax1.plot(xx, n*xx) 
  ax2.plot(xx, n*xx) 
 
plt.show() 

结果:

我怎样才能让颜色循环保持它原来的样子,就像在第二个轴上一样?

请您参考如下方法:

属性循环器可以包含不同的属性,例如颜色、标记、线型等。当通过 ax1.set_prop_cycle(marker=[...]) 设置属性循环器时,您会创建一个新的仅包含标记属性但不包含颜色的属性循环器。

为了拥有标记和颜色属性,您需要同时设置这两个属性,或者通过您要更改的属性来扩展当前属性循环器。后者如下所示。

from matplotlib import pyplot as plt 
import numpy as np 
 
fig, (ax1,ax2) = plt.subplots(nrows=2) 
 
cycler = plt.rcParams["axes.prop_cycle"] 
cycler += plt.cycler(marker=['o','s','x','+','*']) 
ax1.set_prop_cycle(cycler) 
 
 
colors = plt.rcParams["axes.prop_cycle"].by_key()["color"] 
cycler2 = plt.cycler(color=colors) 
cycler2 *= plt.cycler(marker=['o','s','x','+','*']) 
ax2.set_prop_cycle(cycler2) 
 
xx = np.arange(10) 
for n in xx: 
  ax1.plot(xx, n*xx) 
  ax2.plot(xx, n*xx) 
 
plt.show() 

注意这里加法和乘法的区别。