我正在研究一种聚类算法,该算法从以pandas导入的excel文件中获取输入作为列表。该列表被分成由k[0], k[1].....k[7]
表示的类似8个浮点的数据块(索引号对应于字典中的值)。群集以字典形式表示。我的群集输出的一个例子是
cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]}
有没有办法制作散点图,以便[0, 2, 4, 5, 6]
用一种颜色绘制,[1]
用另一种颜色绘制,[3,7]
用另一种颜色绘制。基本上,每个群集应标记相同的颜色。我想知道如何将此列表映射到颜色(优选地,与预先已知的聚类算法中的聚类数量一样多的颜色)。我在python中使用matplotlib,我完全迷失了如何解决这个问题。
答案 0 :(得分:1)
您可以为每个数字列表执行分散,如下所示:
import matplotlib.pyplot as plt
cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]}
colours = ['green', 'orange', 'red']
fig = plt.figure()
ax = fig.add_subplot(111)
for colour, (x, ys) in zip(colours, cluster.items()):
ax.scatter([x] * len(ys), ys, c=colour, linewidth=0, s=50)
plt.show()
给你:
要对此进行扩展以使用颜色贴图,colours
可以构造为:
colours = cm.rainbow(np.linspace(0, 1, len(cluster)))
e.g。
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
cluster = {0: [0, 2, 4, 5, 6], 1: [1], 2: [3, 7]}
colours = cm.rainbow(np.linspace(0, 1, len(cluster)))
fig = plt.figure()
ax = fig.add_subplot(111)
for colour, (x, ys) in zip(colours, cluster.items()):
ax.scatter([x] * len(ys), ys, c=colour, linewidth=0, s=50)
plt.show()