使用Matplotlib

时间:2015-10-20 20:17:43

标签: 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 = 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为我,所以我可以利用cmaps? D3有一种从数据域映射到颜色范围的方法。

2 个答案:

答案 0 :(得分:1)

您可以从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))

答案 1 :(得分:0)

这是@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)