<p>colormap的目标是将间隔[0-1]内的数字映射到颜色</p>
<p>如果考虑<code>tab10</code>颜色映射,<code>plt.cm.tab10(0.0)</code>将返回颜色映射最左边的颜色,<code>plt.cm.tab10(1.0)</code>将返回最右边的颜色</p>
<p><a href="https://i.stack.imgur.com/Jxjfx.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Jxjfx.png" alt="enter image description here"/></a></p>
<p>在这里,用户希望获得与类别一样多的颜色(例如<code>N</code>),因此它们生成间隔为[0-1]的<code>N</code>个数字</p>
<p>例如,如果我们假设<code>categories</code>包含4个元素,那么</p>
<p><code>[i/float(len(categories)-1) for i in range(len(categories))]</code></p>
<p>返回</p>
<p><code>[0.0, 0.3333333333333333, 0.6666666666666666, 1.0]</code></p>
<p>通过将这些数字中的每一个传递给<code>plt.cm.tab10()</code>,这些数字被转换成4种单独的颜色</p>
<p><code>[plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]</code></p>
<p>返回</p>
<pre><code>[(0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0)]
</code></pre>
<p>请注意,这整件事可以写得更简洁,如下所示:</p>
<p><code>plt.cm.tab10(np.linspace(0,1,len(categories)))</code></p>
<p><a href="https://i.stack.imgur.com/QWrkN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/QWrkN.png" alt="enter image description here"/></a></p>