Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Matplotlib将分类变量转换为颜色_Python_Matplotlib_Mpld3 - Fatal编程技术网

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

Python 使用Matplotlib将分类变量转换为颜色,python,matplotlib,mpld3,Python,Matplotlib,Mpld3,我有一个150个变量的列表,这些变量具有以下可能的值: domain = ['val1', 'val2', 'val2'] 我想把它们转换成matplot散点图的颜色。目前,我编写了一个函数,用于手动将我的数据域映射到一个颜色范围,例如: colors = ['aquamarine','purple','blue'] color_map = dict(zip(domain, colors)) colorize = lambda x : color_map[x] c =

我有一个150个变量的列表,这些变量具有以下可能的值:

   domain = ['val1', 'val2', 'val2'] 
我想把它们转换成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)

但是,这是可行的,我必须指定域中每个元素映射到的颜色。有没有办法让matplotlib为我实现这一点,这样我就可以利用CMAP?D3有一种从数据域映射到颜色范围的方法。

您可以从
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) ]
然后可以为分类变量生成颜色:

colors = get_n_colors(len(domain))

这是@C_Z_的答案的改编版本,更容易用于绘图:

# x, y, and category_values should all be the same length (the # of data points)

import matplotlib.pyplot as plt
from matplotlib.cm import viridis

num_categories = len(set(category_values))

colors = [viridis(float(i)/num_categories) for i in category_values]
plt.scatter(x, y, color=colors)

我不得不为我的具体情况做一些改变,然而,cool(float(I)/n)完全按照我的需要工作。谢谢