gpt4 book ai didi

python - 从 scipy 树状图中检索休假颜色

转载 作者:行者123 更新时间:2023-12-04 09:54:17 25 4
gpt4 key购买 nike

我无法从 scipy dendrogram 获取彩色叶子字典。如文档和此 github issue 中所述, color_list树状图字典中的键是指链接,而不是叶子。使用另一个键来表示叶子会很好,有时您需要它来为其他类型的图形着色,例如下面示例中的散点图。

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram

# DATA EXAMPLE
x = np.array([[ 5, 3],
[10,15],
[15,12],
[24,10],
[30,30],
[85,70],
[71,80]])

# DENDROGRAM
plt.figure()
plt.subplot(121)
z = linkage(x, 'single')
d = dendrogram(z)

# COLORED PLOT
# This is what I would like to achieve. Colors are assigned manually by looking
# at the dendrogram, because I failed to get it from d['color_list'] (it refers
# to links, not observations)
plt.subplot(122)
points = d['leaves']
colors = ['r','r','g','g','g','g','g']
for point, color in zip(points, colors):
plt.plot(x[point, 0], x[point, 1], 'o', color=color)

Output from code example above

在这个例子中,手动颜色分配似乎很容易,但我正在处理庞大的数据集,所以在我们在字典中获得这个新特征(彩色叶子)之前,我试图用字典中包含的当前信息以某种方式推断它,但是到目前为止,我没有想法。谁能帮我?

谢谢。

最佳答案

以下方法似乎有效。树状图返回的字典包含带有链接颜色的“color_list”。 'icoord' 和 'dcoord' 与 x , 分别y , 绘制这些链接的坐标。当链接从一个点开始时,这些 x 位置是 5, 15, 25, ...。因此,测试这些 x 位置可以使我们从链接返回到相应的点。并允许将链接的颜色分配给点。

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram

# DATA EXAMPLE
x = np.random.uniform(0, 10, (20, 2))

# DENDROGRAM
plt.figure()
plt.subplot(121)
z = linkage(x, 'single')
d = dendrogram(z)
plt.yticks([])

# COLORED PLOT
plt.subplot(122)
points = d['leaves']
colors = ['none'] * len(points)
for xs, c in zip(d['icoord'], d['color_list']):
for xi in xs:
if xi % 10 == 5:
colors[(int(xi)-5) // 10] = c
for point, color in zip(points, colors):
plt.plot(x[point, 0], x[point, 1], 'o', color=color)
plt.text(x[point, 0], x[point, 1], f' {point}')
plt.show()

example plot

PS: This post关于将点与它们的集群匹配也可能是相关的。

关于python - 从 scipy 树状图中检索休假颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61959602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com