需要可视化python字典

时间:2017-07-13 17:39:16

标签: python matplotlib

我正在研究一种聚类算法,该算法从以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,我完全迷失了如何解决这个问题。

1 个答案:

答案 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()

给你:

multi coloured scatter plot

要对此进行扩展以使用颜色贴图,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()