【问题标题】:How to put colours in dendograms of matplotlib - scipy in python?python - 如何将颜色放在matplotlib的树状图中-python中的scipy?
【发布时间】:2013-07-06 01:30:09
【问题描述】:

我有以下代码对数据执行分层聚类:

Z = linkage(data,method='weighted')
  plt.subplot(2,1,1)
  dendro = dendrogram(Z)
  leaves = dendro['leaves']
  print leaves
  plt.show()

如何在树状图中所有簇都具有相同的颜色(蓝色)。有没有办法针对集群之间的相似性使用不同的颜色?

【问题讨论】:

    标签: python matplotlib scipy


    【解决方案1】:

    看看documentation,看起来你可以通过link_color_func关键字或color_threshold关键字来获得不同的颜色。

    编辑:

    树状图着色方案的默认行为是,如果k 是低于切割阈值的第一个节点,则给定color_threshold = 0.7*max(Z[:,2]) 以将集群节点k 下方的所有后代链接着色为相同颜色;否则,连接距离大于或等于阈值的节点的所有链接都是蓝色的[来自文档]。

    这到底是什么意思?好吧,如果你看一个树状图,不同的集群连接在一起。两个集群之间的“距离”是它们之间链接的高度。 color_threshold 是新集群将具有不同颜色的高度。如果你所有的集群都是蓝色的,那么你需要提高你的color_threshold。例如,

    In [48]: mat = np.random.rand(10, 10)
    In [49]: z = linkage(mat, method="weighted")
    In [52]: d = dendrogram(z)
    In [53]: d['color_list']
    Out[53]: ['g', 'g', 'b', 'r', 'c', 'c', 'c', 'b', 'b']
    In [54]: plt.show()
    

    我可以检查默认的color_threshold 是什么

    In [56]: 0.7*np.max(z[:,2])
    Out[56]: 1.0278719020096947
    

    如果我降低color_threshold,我会变得更蓝,因为更多链接的距离大于新的color_threshold。您可以直观地看到这一点,因为 0.9 以上的所有链接现在都是蓝色的:

    In [64]: d = dendrogram(z, color_threshold=.9)
    In [65]: d['color_list']
    Out[65]: ['g', 'b', 'b', 'r', 'b', 'b', 'b', 'b', 'b']
    In [66]: plt.show()
    

    如果我将color_threshold 增加到1.21.2 下面的链接将不再是蓝色的。此外,青色和红色链接将合并为单一颜色,因为它们的父链接位于1.2 下方:

    【讨论】:

    • 你能举个例子吗?我正在尝试使用它们,但我不知道将什么作为参数传递给两者
    • 可能与我的距离矩阵有关。所有成对距离都在 0.8 左右,所以也许这就是我得到相同颜色的方式
    • 如果你有一个字典可以将叶子/节点映射到它们的颜色,你如何使用link_color_func
    • 你试过dendrogram(Z, link_color_func=lambda k: colors[k]),其中colors是一个将链接的ID(颠倒的Us)映射到颜色的字典吗?
    • 您好,感谢您回复我。我在这里发布了我的示例stackoverflow.com/questions/38153829/…。我以同样的方式使用它,但我得到了 key error b/c 我的密钥是 leaf labels 而它想要的密钥是 int
    猜你喜欢
    • 2016-11-04
    • 2016-07-31
    • 2013-01-25
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多