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

Python 设置其他属性循环时,为什么轴颜色循环减少为单一颜色?,python,matplotlib,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.

在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()
结果:


如何使颜色循环保持原来的状态,如在第二轴中?

您可以使用
rcParams
提取
color\u循环
,并将其指定为
ax1
的颜色(
matplotlib
version
2.0.2

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

如果出现折旧警告,请编辑(@ImportanceOfBeingEarnest在评论中的建议)

ax1.set_prop_cycle(marker=['o','s','x','+','*'], color=plt.rcParams["axes.prop_cycle"].by_key()["color"][:5])
输出


您可以使用
rcParams
提取
color\u循环
,并将其指定为
ax1
as的颜色(
matplotlib
version
2.0.2

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

如果出现折旧警告,请编辑(@ImportanceOfBeingEarnest在评论中的建议)

ax1.set_prop_cycle(marker=['o','s','x','+','*'], color=plt.rcParams["axes.prop_cycle"].by_key()["color"][:5])
输出


属性循环器可以由不同的属性组成,例如颜色、生成器、线型等。当通过ax1设置属性循环器时。设置属性循环(标记=[…])创建一个新的属性循环器,它只包含标记属性,而不包含颜色

要拥有标记颜色属性,您需要同时设置这两个属性,或者根据要更改的属性扩展当前属性循环器。后者将在下文中显示

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


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

属性循环器可以由不同的属性组成,例如颜色、生成器、线型等。当通过ax1设置属性循环器时。设置属性循环(标记=[…])可以创建一个新的属性循环器,该属性循环器只包含标记属性,而不包含颜色

要拥有标记颜色属性,您需要同时设置这两个属性,或者根据要更改的属性扩展当前属性循环器。后者将在下文中显示

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


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

请落选者解释他/她的落选。不作任何评论就投反对票是没有道理的。这种方法实际上比我回答的方法更简洁。所以我猜这只是一些随机的否决票,有时会发生在So上。谢谢。这可能就是解决办法。然而,循环器(标记/颜色)需要具有相同的长度(似乎它们恰好在您的情况下,但在我的情况下,不会产生错误)。理想情况下,我希望避免这种情况。此外,axes.color_cycle会产生有利于axes.prop_cycle的弃用警告,但后者不支持切片(以获得正确的长度)。不支持,但如果有人看到使用弃用的方法或仅在旧版本中工作的解决方案,这是有意义的。但是,如果
ax1.set_prop_cycle(marker=['o'、's'、'x'、'+'、'*'],color=plt.rcParams[“axes.prop_cycle”]。按键()[“color”][:5])
。也许@Bazingaa可以更新他们的答案。请落选者解释他/她的落选。不作任何评论就投反对票是没有道理的。这种方法实际上比我回答的方法更简洁。所以我猜这只是一些随机的否决票,有时会发生在So上。谢谢。这可能就是解决办法。然而,循环器(标记/颜色)需要具有相同的长度(似乎它们恰好在您的情况下,但在我的情况下,不会产生错误)。理想情况下,我希望避免这种情况。此外,axes.color_cycle会产生有利于axes.prop_cycle的弃用警告,但后者不支持切片(以获得正确的长度)。不支持,但如果有人看到使用弃用的方法或仅在旧版本中工作的解决方案,这是有意义的。但是,如果
ax1.set_prop_cycle(marker=['o'、's'、'x'、'+'、'*'],color=plt.rcParams[“axes.prop_cycle”]。按键()[“color”][:5])
。也许@Bazingaa可以用这个更新他们的答案。