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

3 投票
2 回答
6288 浏览
提问于 2025-04-18 13:44

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

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

为了实现你想要的效果,你的标签数组必须是一个浮点数组。看起来,[labels] 被当作整数数组来处理了。所以,你需要按照下面的方式修改你的代码,以达到想要的结果。

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

应该改成:

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

保持优秀!!

3

因为你的标签是整数,所以可以把它们当作颜色列表的索引来用:

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

然后,使用散点图(scatter)比使用普通图(plot)要简单,因为你可以提供一个颜色的列表或序列:

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这个网站。

撰写回答