gpt4 book ai didi

python - 如何访问自定义 prop_cycle 颜色?

转载 作者:行者123 更新时间:2023-12-01 02:36:30 27 4
gpt4 key购买 nike

我在文本文件中定义了一个自定义颜色循环器,并通过 plt.style.context() 调用它。我定义的循环有 12 种颜色。注释绘图时,如果我尝试使用颜色字符串访问自定义循环仪颜色,'C0'通过'C9'工作但是'C10'抛出ValueError: Invalid RGBA argument: 'C10' 。所有 12 个值肯定都在那里。样式文件的内容style.yaml :

axes.prop_cycle : cycler('color', ['332288', 'CC6677', 'DDCC77', '117733', '88CCEE', 'AA4499', '44AA99', '999933', '882255', '661100', '6699CC', 'AA4466'])

测试脚本:

import numpy as np
import matplotlib.pyplot as plt
data = np.c_[np.zeros(13), np.arange(13)].T
labels = list('abcdefghijklm')

with plt.style.context('style.yaml'):
# just to prove that the colors are loading correctly:
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
print('{} colors: {}'.format(len(cycle), cycle))
# now the actual plotting:
fig, ax = plt.subplots()
ax.plot(data)
for ix in range(data.shape[1]):
ax.text(x=1, y=data[1, ix], s=labels[ix], color='C{}'.format(ix))

结果(尽管 ValueError 在 10 个标签后停止绘制)是线条遵循我的自定义循环器颜色,但文本标签使用 matplotlib 默认循环器颜色(参见屏幕截图)。如何使用外部 YAML 文件中定义的自定义循环器颜色显示文本?

screenshot of example plot

最佳答案

首先,您只能通过 "CN" 表示法访问颜色循环的前 10 种颜色。作为 matplotlib states it :

To access these colors outside of the property cycling the notation for colors 'CN', where N takes values 0-9, was added to denote the first 10 colors in mpl.rcParams['axes.prop_cycle']

其次,CN 的值不会在样式上下文中更新,因此不能用于此类情况。

但是,您当然可以直接使用循环仪中的颜色:
(请注意,我在这里忽略了问题的 yaml 部分。)

import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler
data = np.c_[np.zeros(13), np.arange(13)].T
labels = list('abcdefghijklm')

plt.rcParams["axes.prop_cycle"] = cycler('color',
['#332288', '#CC6677', '#DDCC77', '#117733', '#88CCEE', '#AA4499',
'#44AA99', '#999933', '#882255', '#661100', '#6699CC', '#AA4466'])

cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

fig, ax = plt.subplots()
ax.plot(data)
for ix in range(data.shape[1]):
ax.text(x=1, y=data[1, ix], s=labels[ix], color=cycle[ix%len(cycle)])

plt.show()

另一种方法可能是使用 next 循环遍历循环器:

import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler

data = np.c_[np.zeros(13), np.arange(13)].T
labels = list('abcdefghijklm')

plt.rcParams["axes.prop_cycle"] = cycler('color',
['#332288', '#CC6677', '#DDCC77', '#117733', '#88CCEE', '#AA4499',
'#44AA99', '#999933', '#882255', '#661100', '#6699CC', '#AA4466'])


fig, ax = plt.subplots()
ax.plot(data)

ax.set_prop_cycle(None)
cycler = ax._get_lines.prop_cycler
plt.gca().set_prop_cycle(None)
for ix in range(data.shape[1]):
ax.text(x=1, y=data[1, ix], s=labels[ix], color=next(cycler)['color'])

plt.show()

两个代码都会生成以下图:

enter image description here

关于python - 如何访问自定义 prop_cycle 颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com