在Python中快速将整数数组转换为颜色字符串或颜色值的方法
我正在尝试根据数据的类别标签来绘制数据点。
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])
这样就能得到这个效果:
如果想要好看的颜色,可以使用colorbrewer这个网站。