Matplotlib 获取默认行颜色周期

Matplotlib 获取默认行颜色周期,matplotlib,Matplotlib,我注意到当你绘图时,第一条线是蓝色,然后是绿色,然后是红色,依此类推 有什么方法可以访问此颜色列表吗?我已经看到了一百万篇关于如何更改颜色循环或访问迭代器的帖子,但没有看到如何只获取matplotlib默认循环的颜色列表。在matplotlib版本>=1.5中,可以打印名为轴的rcParam。prop\u cycle: print(plt.rcParams['axes.prop_cycle'].by_key()['color']) # [u'#1f77b4', u'#ff7f0e', u'#2

我注意到当你绘图时,第一条线是蓝色,然后是绿色,然后是红色,依此类推


有什么方法可以访问此颜色列表吗?我已经看到了一百万篇关于如何更改颜色循环或访问迭代器的帖子,但没有看到如何只获取matplotlib默认循环的颜色列表。

在matplotlib版本>=1.5中,可以打印名为
轴的
rcParam
。prop\u cycle

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

# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']
print plt.rcParams['axes.color_cycle']

# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']
或等效地,在
python2
中:

print plt.rcParams['axes.prop_cycle'].by_key()['color']
在<1.5版中,这被称为
颜色循环

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

# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']
print plt.rcParams['axes.color_cycle']

# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']

请注意,默认颜色周期在版本2.0.0中发生了更改。通常,不需要从任何地方获取默认颜色周期,因为它是默认颜色周期,因此仅使用它就足够了

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)

for i in range(4):
    line, = ax.plot(t,i*(t+1), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')

plt.show()

如果您想使用不同的默认颜色循环,当然有几个选项

“tab10”彩色地图 首先应该提到的是,
“tab10”
颜色映射包含来自默认颜色周期的颜色,您可以通过
cmap=plt.get\u cmap(“tab10”)
获得它

因此,与上述情况相当的是

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cmap = plt.get_cmap("tab10")
for i in range(4):
    ax.plot(t,i*(t+1),   color=cmap(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')

plt.show()
颜色循环中的颜色 您也可以直接使用颜色循环器,
cycle=plt.rcParams['axes.prop_cycle'].by_key()['color']
。这将给出循环中的颜色列表,您可以使用该列表进行迭代

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

for i in range(4):
    ax.plot(t,i*(t+1),   color=cycle[i], linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')

plt.show()
CN
符号 最后,
CN
表示法允许获得颜色循环的
N
th颜色,
color=“C{}”。格式(i)
。但是,这仅适用于前10种颜色([0,1,…9]中的
N)


此处显示的所有代码生成相同的绘图

如果您想快速获得matplotlib用于线条的RGB颜色,请点击这里:

>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(0.12156862745098039, 0.4666666666666667, 0.7058823529411765)
(1.0, 0.4980392156862745, 0.054901960784313725)
(0.17254901960784313, 0.6274509803921569, 0.17254901960784313)
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392)
(0.5803921568627451, 0.403921568627451, 0.7411764705882353)
(0.5490196078431373, 0.33725490196078434, 0.29411764705882354)
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902)
(0.4980392156862745, 0.4980392156862745, 0.4980392156862745)
(0.7372549019607844, 0.7411764705882353, 0.13333333333333333)
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
或对于uint8:

import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(31, 119, 180)
(255, 127, 14)
(44, 160, 44)
(214, 39, 40)
(148, 103, 189)
(140, 86, 75)
(227, 119, 194)
(127, 127, 127)
(188, 189, 34)
(23, 190, 207)
重新审视CN符号 我想介绍Matplotlib的一个新发展。在前面的回答中,我们读到

最后,
CN
表示法允许获得颜色循环的
N
th颜色,
color=“C{}”。格式(i)
。但是,这仅适用于前10种颜色([0,1,…9]中的
N)

但是

给予


谢谢!稍微更正:第一个应该是:
lines\u color\u cycle=[p['color']表示plt.rcParams['axes.prop\u cycle']
@Peter,yes,或者
plt.rcParams['axes.prop\u cycle'].。通过_键()['color']
可以告诉matplotlib使用某种循环吗?必须迭代颜色数组意味着您必须在使用一个完整循环后添加返回索引0的逻辑。@Mehdi当然,matplotlib使用的是颜色循环。这个问题要求得到这个循环的颜色。我认为
CN
符号应该在你的答案中更突出,我差点错过了。我怀疑绝大多数用例都对能够访问前10种颜色感到满意,并且传递
'C1'
朋友远比明确获取道具循环要简单。你能添加到源代码的链接吗?Thanks@Luca我没有消息来源,我只是发现它有效。。。无论如何,最终的源代码是Matplotlib源代码,但是
../Matplotlib/colors.py
是>2000行,唉,在回答您的问题时,我还没有找到自己的方法。