设置其他属性循环时,为什么将轴颜色循环减少为单一颜色?

时间:2018-09-04 11:13:28

标签: python matplotlib

在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()

结果: screenshot

如何使颜色循环保持 不变,如在第二轴上一样?

2 个答案:

答案 0 :(得分:3)

属性循环程序可以包含不同的属性,例如颜色,标记,线条样式等。通过ax1.set_prop_cycle(marker=[...])设置属性循环程序时,您将创建一个新的属性循环程序,它仅包含标记属性,而没有颜色。 / p>

要拥有标记颜色属性,您既需要设置这两个属性,又需要根据要更改的属性来扩展当前属性循环程序。后者将显示在下面。

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()

enter image description here

请注意此处加法和乘法之间的区别。

答案 1 :(得分:2)

您可以使用color_cycle提取rcParams并将其指定为{{1}版本ax1的{​​{1}}的颜色

matplotlib

您的机器上的颜色可能有所不同,但在两个图中都是一致的。

在发生折旧警告时进行编辑(在评论中@ImportanceOfBeingEarnest的建议)

2.0.2

输出

enter image description here