Joe Kington的excellent answer已经4岁了,
Matplotlib 发生了增量变化(特别是引入
cycler 模块)和新的主要版本 Matplotlib 2.0.x,
引入了从这一点来看很重要的风格差异
默认使用的颜色的视图。
单行颜色
各个线条的颜色(以及不同情节的颜色
元素,例如,散点图中的标记)由color 控制
关键字参数,
plt.plot(x, y, color=my_color)
my_color 是
颜色循环
默认情况下,不同的线条使用不同的颜色绘制,即
默认情况下定义并以循环方式使用(因此名称
颜色循环)。
颜色循环是axes 对象的一个属性,在旧版本中
发布只是一系列有效的颜色名称(默认情况下
一个字符颜色名称的字符串,"bgrcmyk"),你可以设置它
如
my_ax.set_color_cycle(['kbkykrkg'])
(如 in a comment 所述,此 API 已被弃用,稍后会详细介绍)。
在 Matplotlib 2.0 中,默认颜色循环是 ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"],Vega category10 palette。
(图为https://vega.github.io/vega/docs/schemes/截图)
cycler 模块:可组合循环
以下代码表明颜色循环概念已被弃用
In [1]: from matplotlib import rc_params
In [2]: rc_params()['axes.color_cycle']
/home/boffi/lib/miniconda3/lib/python3.6/site-packages/matplotlib/__init__.py:938: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
warnings.warn(self.msg_depr % (key, alt_key))
Out[2]:
['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
'#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']
现在相关属性是'axes.prop_cycle'
In [3]: rc_params()['axes.prop_cycle']
Out[3]: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
以前,color_cycle 是有效颜色的通用序列
面额,现在默认情况下它是一个 cycler 对象,其中包含一个
标签 ('color') 和一系列有效的颜色面额。这
相对于前一个界面的进步是它是
不仅可以在线条颜色上循环,还可以在其他颜色上循环
行属性,例如,
In [5]: from cycler import cycler
In [6]: new_prop_cycle = cycler('color', ['k', 'r']) * cycler('linewidth', [1., 1.5, 2.])
In [7]: for kwargs in new_prop_cycle: print(kwargs)
{'color': 'k', 'linewidth': 1.0}
{'color': 'k', 'linewidth': 1.5}
{'color': 'k', 'linewidth': 2.0}
{'color': 'r', 'linewidth': 1.0}
{'color': 'r', 'linewidth': 1.5}
{'color': 'r', 'linewidth': 2.0}
如您所见,cycler 对象是可组合的,当您对组合的 cycler 进行迭代时,您在每次迭代中得到的是 plt.plot 的关键字参数字典.
您可以在每个 axes 对象比率上使用新的默认值,
my_ax.set_prop_cycle(new_prop_cycle)
或者您可以临时安装新的默认设置
plt.rc('axes', prop_cycle=new_prop_cycle)
或完全更改默认编辑您的.matplotlibrc 文件。
最后一种可能,使用上下文管理器
with plt.rc_context({'axes.prop_cycle': new_prop_cycle}):
...
在一组不同的绘图中使用新的cycler,在上下文结束时恢复为默认值。
cycler() 函数的文档字符串很有用,但关于cycler 模块和cycler() 函数的(不是那么多)血腥细节以及示例,可以在in the fine docs 找到。