在python中将整数数组转换为颜色字符串或颜色值的快速方法

时间:2014-07-17 18:17:42

标签: python numpy matplotlib networkx

我正在尝试根据类别标签绘制数据点。

import numpy
import matplotlib as plt
x = numpy.random.uniform(size = [1, 15])
labels = numpy.array([1,2,2,2,2,1,1,2,3,1,3,3,1,1, 3])
plt.plot(x, 'o', c = labels)

当我做上述操作时,Python抱怨颜色值必须为0,1。然后我使用

plt.plot(x, 'o', c = labels/max(labels))

没有生成错误。弹出一个绘图窗口,但绘图窗口中没有任何内容。我想知道根据数据标签定义颜色的正确方法是什么?

我也在尝试根据类标签为节点着色。这是在networkx中完成的。一个简单的例子是:

import networkx as nx
G=nx.complete_graph(5)
nx.draw(G, node_col = node_labels)

数组node_labels将是5个顶点的标签。我尝试使用上面尝试的相同方法,但网络总是有红色节点。

任何见解将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

由于标签是整数,因此可以将它们用作颜色列表的索引:

colors = ['#e41a1c', '#377eb8', '#4daf4a']

然后,使用散射比绘图更简单,因为您可以提供颜色列表/序列:

labels = np.random.randint(low=0, high=3, size=20)
plt.scatter(np.random.rand(20), np.random.rand(20), color=np.array(colors)[labels])

哪个会给你这个:

enter image description here

要获得漂亮的颜色,您可以使用colorbrewer

答案 1 :(得分:0)

为了做你正在寻找的东西,你的标签数组必须是一个浮点数组。从它的外观来看,[labels]被解释为整数数组。因此,请按如下所示修改代码以获得所需的结果。

plt.plot(x, 'o', c = labels)

应更改为:

plt.plot(x, 'o', c = labels.astype(numpy.float) 

保持棒极了!!