<p><a href="https://stackoverflow.com/users/325565/joe-kington">Joe Kington</a>的<a href="https://stackoverflow.com/a/16006929/2749397">excellent answer</a>已经4岁了,
Matplotlib已逐渐更改(特别是
以及新的主要版本Matplotlib 2.0.x,
从一个重要的角度介绍了文体差异
默认使用的颜色的视图。</p>
<h3>单个线条的颜色</h3>
<p>各条线的颜色(以及不同图的颜色
元素,例如散点图中的标记)由<code>color</code>控制
关键字参数</p>
<pre><code>plt.plot(x, y, color=my_color)
</code></pre>
<p><code>my_color</code>是</p>
<ul>
<li>代表RGB或RGB a的<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">tuple of floats</a>(作为<code>(0.,0.5,0.5)</code>)</li>
<li>a <a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">RGB/RGBA hex string</a>(作为<code>"#008080"</code>(RGB)或<code>"#008080A0"</code>)</li>
<li>以[0,1]表示的浮点值的字符串,包括灰度值(例如“0.6”)</li>
<li>一个<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">short color name</a>(如<code>"k"</code>表示黑色,可能是<code>"bgrcmykw"</code>中的值)</li>
<li>a <a href="https://www.w3.org/TR/css3-color/#svg-color" rel="noreferrer">long color name</a>(as <code>"teal"</code>)---也称为HTML颜色名</em>(在<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">the docs</a>中也<em>X11/CSS4颜色名</em>)</li>
<li>一个<a href="https://xkcd.com/color/rgb/" rel="noreferrer">name from the xkcd color survey</a>,<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">prefixed with ^{<cd10>}</a>(例如,<code>'xkcd:barbie pink'</code>)</li>
<li>在<a href="https://github.com/vega/vega/wiki/Scales#scale-range-literals" rel="noreferrer">default ^{<cd12>} categorical palette</a>(例如,<code>'tab:blue'</code>,<code>'tab:olive'</code>)中的<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">color from the Tableau Colors</a></li>
<li>当前颜色周期的<a href="https://matplotlib.org/api/colors_api.html" rel="noreferrer">reference to a color</a>(如<code>"C3"</code>,即字母<code>"C"</code>,后跟<code>"0-9"</code>中的一个数字)。</li>
</ul>
<h3>颜色周期
<p>默认情况下,使用不同的颜色绘制不同的线
默认情况下定义,并以循环方式使用(因此名称
<em>颜色周期。</p>
<p>颜色循环是<code>axes</code>对象的一个属性,在较旧的
发行版只是一系列有效的颜色名称(默认情况下
一个字符颜色名称的字符串,<code>"bgrcmyk"</code>),您可以设置它
就像在</p>
<pre><code>my_ax.set_color_cycle(['kbkykrkg'])
</code></pre>
<p>(如前所述,<a href="https://stackoverflow.com/questions/16006572/plotting-different-colors-in-matplotlib#comment74786762_16006929">in a comment</a>此API已被弃用,稍后将详细介绍)。</p>
<p>在Matplotlib 2.0中,默认的颜色周期是<code>["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]</code>,即<a href="https://github.com/vega/vega/wiki/Scales#scale-range-literals" rel="noreferrer">Vega category10 palette</a>。</p>
<p><a href="https://i.stack.imgur.com/tSS9n.png" rel="noreferrer"><img src="https://i.stack.imgur.com/tSS9n.png" alt="enter image description here"/></a></p>
<p><sub>(图像是来自<a href="https://vega.github.io/vega/docs/schemes/" rel="noreferrer">https://vega.github.io/vega/docs/schemes/</a>)的屏幕截图</p>
<h3><em>循环器</em>模块:可组合循环</h3>
<p>下面的代码表明颜色循环概念已被弃用</p>
<pre><code>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']
</code></pre>
<p>现在相关的属性是<code>'axes.prop_cycle'</code></p>
<pre><code>In [3]: rc_params()['axes.prop_cycle']
Out[3]: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
</code></pre>
<p>以前,<code>color_cycle</code>是有效颜色的通用序列
命名,现在默认是一个<code>cycler</code>对象,包含
标签(<code>'color'</code>)和一系列有效的颜色名称。这个
相对于上一个接口,向前一步是
不仅可以在线条颜色上循环,还可以在其他颜色上循环
行属性,例如</p>
<pre><code>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}
</code></pre>
<p>如您所见,<code>cycler</code>对象是<em>可组合的</em>对象,当您在组合的<code>cycler</code>上迭代时,在每次迭代中,您得到的是<code>plt.plot</code>的关键字参数字典。</p>
<p>您可以对每<code>axes</code>对象比率使用新的默认值</p>
<pre><code>my_ax.set_prop_cycle(new_prop_cycle)
</code></pre>
<p>或者您可以临时安装新的默认值</p>
<pre><code>plt.rc('axes', prop_cycle=new_prop_cycle)
</code></pre>
<p>或者完全更改编辑<code>.matplotlibrc</code>文件的默认值。</p>
<p>最后一种可能是,使用上下文管理器</p>
<pre><code>with plt.rc_context({'axes.prop_cycle': new_prop_cycle}):
...
</code></pre>
<p>在一组不同的绘图中使用新的<code>cycler</code>,在上下文结束时恢复为默认值。</p>
<p>函数<code>cycler()</code>的doc字符串是有用的,但是关于<code>cycler</code>模块和<code>cycler()</code>函数的(不是很多)血淋淋的细节以及示例可以找到<a href="https://matplotlib.org/cycler/" rel="noreferrer">in the fine docs</a>。</p>