来自tab10的matplotlib通用色彩映射

时间:2017-11-10 12:15:52

标签: python matplotlib colors color-scheme

这个问题与SO(matplotlib-change-colormap-tab20-to-have-three-colors

中的这个问题有关

我想以一种方式调整tab10色彩图,我可以按照我想要的步骤更改每种颜色的alpha级别。下面是一个示例(9种颜色,3个alpha级别),不会产生预期的输出。此外,它不够通用(因为if elif staements)。

我有什么想法可以做到这一点?

在这个例子中,我有3个组,有3个子组:

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

n_feature = 3
sub_feature = 3
col = []
for index in range(n_feature*sub_feature):
# loop over colors and change the last entry in descending order 3 times
        col.append(list(plt.cm.tab10(index)))

i = 0        
for item in col:
# loop over colors and change the last entry in descending order 3 times
    if i == 0:
        item[-1] = 0.9
        i+=1
    elif i == 1:
        item[-1] = 0.7
        i+=1
    elif i == 2:
        item[-1] = 0.5
        i = 0

gr = df.groupby(['a', 'a1'])

for index, item in enumerate(gr):
    name, val = item
    y = val.iloc[0,2:].values
    x = np.arange(len(y))
    plt.plot(x, y, '.-', color=col[index])

plt.show()

enter image description here

这是数据:

{' a':{0:' A',1:' A',2:' A',3:& #39; B',4:' B',5:' B',6:' C',7:' C&#39 ;,8:'},  ' a1':{0:1,1:2,2:3,3:1,4:2,5:3,6:1,7:2,8:3},  ' b':{0:1.0,   1:5.0,   2:9.0,   3:1.5,   4:5.5,   5:9.5,   6:1.75,   7:5.75,   8:9.75},  ' c':{0:2.0,   1:6.0,   2:10.0,   3:2.5,   4:6.5,   5:10.5,   6:2.75,   7:6.75,   8:10.75},  ' d':{0:3.0,   1:7.0,   2:11.0,   3:3.5,   4:7.5,   5:11.5,   6:3.75,   7:7.75,   8:11.75},  ' e':{0:4.0,   1:8.0,   2:12.0,   3:4.5,   4:8.5,   5:12.5,   6:4.75,   7:8.75,   8:12.75}}

1 个答案:

答案 0 :(得分:12)

您可以使用HSV系统获得相同色调的不同饱和度和发光颜色。假设您最多有10个类别,则tab10地图可用于获取一定数量的基色。从那些你可以为子类别选择几个较浅的色调。

以下是函数categorical_cmap,它将类别数(nc)和子类别数(nsc)作为输入,并返回带有{{1的色彩映射表不同的颜色,每个类别都有相同色调的nc*nsc种颜色。

nsc

enter image description here