使用 Matplotlib 将分类变量转换为颜色

use*_*995 6 python matplotlib mpld3

我有一个包含 150 个变量的列表,它们具有以下可能值:

   domain = ['val1', 'val2', 'val2'] 
Run Code Online (Sandbox Code Playgroud)

我想将它们转换为用作 matplot 散点图的颜色。目前,我编写了一个函数来手动从数据域映射到颜色范围,例如:

  colors = ['aquamarine','purple','blue']
  color_map = dict(zip(domain, colors)) 
  colorize = lambda x : color_map[x]
  c = list(map(colorize, labels))

  #and then I explicitly pass the array to scatter: 
  scatter = ax.scatter(t_x,
                 t_y,
                 c=c,
                 alpha=0.3,
                 cmap=plt.cm.cool,
                 s = 500)
Run Code Online (Sandbox Code Playgroud)

然而,这是有效的,我必须指定我的域的每个元素映射到的颜色。有没有办法让 matplotlib 为我做到这一点,这样我就可以利用 cmaps 了?D3 有一种从数据域映射到颜色范围的方法。

C_Z*_*_Z_ 4

您可以从 导入颜色图matplotlib.cm,然后通过将其作为函数调用来从中选择单个颜色。它接受从 0 到 1(或者从 1 到 255,这有点奇怪)的输入数字,并沿着颜色图为您提供颜色。

import matplotlib
from matplotlib.cm import cool

def get_n_colors(n):
    return[ cool(float(i)/n) for i in range(n) ]
Run Code Online (Sandbox Code Playgroud)

然后您可以为分类变量生成颜色:

colors = get_n_colors(len(domain))
Run Code Online (Sandbox Code Playgroud)