【问题标题】:Need to visualize a python dictionary需要可视化python字典
【发布时间】:2017-07-14 04:04:25
【问题描述】:

我正在研究一种聚类算法,该算法从使用 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,完全不知道如何解决这个问题。

【问题讨论】:

标签: python matplotlib


【解决方案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)))

例如

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

【讨论】:

  • 谢谢@马丁·埃文斯。这肯定会达到目的。我刚刚意识到,我真的不需要绘制构成索引号的所有点,这是我一直试图实现的,但没有必要。
猜你喜欢
  • 2018-04-05
  • 2020-12-23
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多