我使用下面的代码在R中运行层次聚类分析后生成了一个树形图.我现在尝试根据另一个因子变量为标签着色,该变量保存为矢量.我实现这一目标的最接近的方法是使用包中的ColourDendrogram函数对分支进行颜色编码sparcl.如果可能的话,我更愿意对标签进行颜色编码.我在以下链接中找到了类似问题的答案在树形图中使用现有列和着色分支的树形图的颜色分支,但是我还没有能够找到如何为我的目的转换示例代码.下面是一些示例数据和代码.
> dput(df)
structure(list(labs = c("a1", "a2", "a3", "a4", "a5", "a6", "a7",
"a8", "b1", "b2", "b3", "b4", "b5", "b6", "b7"), var = c(1L,
1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L), td = c(13.1,
14.5, 16.7, 12.9, 14.9, 15.6, 13.4, 15.3, 12.8, 14.5, 14.7, 13.1,
14.9, 15.6, 14.6), fd = c(2L, 3L, 3L, 1L, 2L, 3L, 2L, 3L, 2L,
4L, 2L, 1L, 4L, 3L, 3L)), …Run Code Online (Sandbox Code Playgroud) 我想修改从hclust对象的绘图生成的树形图中的叶子的属性.最低限度,我想改变颜色,但您可以提供的任何帮助将不胜感激.
我确实尝试过谷歌答案,但我看到的每一个解决方案似乎都比我猜想的要难得多.
我使用以下R代码生成带有基于TraMineR序列的标签的树形图(参见附图):
library(TraMineR)
library(cluster)
clusterward <- agnes(twitter.om, diss = TRUE, method = "ward")
plot(clusterward, which.plots = 2, labels=colnames(twitter_sequences))
Run Code Online (Sandbox Code Playgroud)
完整代码(包括数据集)可以在这里找到.
由于树形图以图形方式提供信息,因此以文本和/或表格格式获取相同信息将非常方便.如果我调用对象clusterward的任何方面(由agnes创建),例如"order"或"merge",我会使用数字而不是我得到的名称来标记所有内容colnames(twitter_sequences).另外,我看不出如何输出树形图中以图形方式表示的分组.
总结一下:如何使用R以及理想情况下的电车/集群库正确显示标签,以文本/表格格式获取集群输出?

我试图找到使用 python 中的 PANDAS 包创建的树状图。下面显示了示例数据。
import numpy as np
from pandas import *
import matplotlib.pyplot as plt
from hcluster import pdist, linkage, dendrogram
from numpy.random import rand
Index= ['aaa','bbb','ccc','ddd','eee']
Cols = ['A', 'B', 'C','D']
df = DataFrame(abs(np.random.randn(5, 4)), index= Index, columns=Cols)
>>> df
A B C D
aaa 0.987415 0.192240 0.709559 0.317106
bbb 0.856932 0.252441 1.183127 0.712855
ccc 1.687198 0.462673 1.046469 0.159287
ddd 0.977152 2.657582 0.491975 0.027280
eee 0.120464 0.945034 0.142658 0.537024
>>>
X = df.T.values #Transpose values
Y = …Run Code Online (Sandbox Code Playgroud) I have done a Heat Map using the function heatmap.2 of gplots in R, but I don't have an idea of how to coloring the branches and tick labels per groups (Eg. if I cut the tree to have four gruops like in my second figure). I have checked that it is possible to color the dendrogram alone using dendextend package.
Also there is a heatmap here: selecting number of leaf nodes of dendrogram in heatmap.2 in R with a …
我正在尝试使用ape包中的plot.phylo命令为R中的系统发育类型图的边(线)添加颜色.这个例子是针对"粉丝"类型的情节,虽然我希望这种方法与"phylogram类型"或其他类似.
library('ape')
hc <- hclust(dist(USArrests), "ave")
plot(as.phylo(hc), type="fan")
Run Code Online (Sandbox Code Playgroud)
使用tip.color选项与cutree命令相结合,基于一组组向提示(标签)添加颜色是没有问题的.
hc.cuts <- cutree(hc, k=5)
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
edge.color选项定义边缘的颜色,但在需要许多颜色时不以logincal方式定义.
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts], edge.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
但是,一旦树形图的分支指定给定的组,我希望边缘匹配终端尖端颜色.在给定的示例中,朝向红色和蓝色组,第一级边缘将保持黑色(因为它朝向两组:红色和蓝色),但是超出此范围的边缘将与最终的尖端颜色相同.
我怀疑关键在于弄清楚as.phylo对象中$ edge值的排序,但我自己无法想象.谢谢.
我正在使用层次聚类来聚类单词向量,我希望用户能够显示显示聚类的树形图.但是,由于可能有数千个单词,我希望将此树形图截断为一些合理的有价值,每个叶子的标签是该群集中最重要单词的字符串.
我的问题是,根据文档,"标签[i]值是只有当它对应于原始观察而不是非单一群集时才放在第i个叶子节点下的文本." 我认为这意味着我不能标记簇,只能标记奇点?
为了说明,这是一个简短的python脚本,它生成一个简单的标记树形图:
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
randomMatrix = np.random.uniform(-10,10,size=(20,3))
linked = linkage(randomMatrix, 'ward')
labelList = ["foo" for i in range(0, 20)]
plt.figure(figsize=(15, 12))
dendrogram(
linked,
orientation='right',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
plt.show()
Run Code Online (Sandbox Code Playgroud)
现在假设我要截断到只有5个叶子,并且对于每个叶子,将它标记为"foo,foo,foo ...",即构成该群集的单词.(注意:生成这些标签不是问题.)我将其截断,并提供一个匹配的标签列表:
labelList = ["foo, foo, foo..." for i in range(0, 5)]
dendrogram(
linked,
orientation='right',
p=5,
truncate_mode='lastp',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
Run Code Online (Sandbox Code Playgroud)
这是问题,没有标签:
我想这里可能有一个参数'leaf_label_func',但我不知道如何使用它.
我怎样才能删除这个情节的所有标签?或者,甚至更好,我怎样才能使它可读?
我用这个命令创建了它:
plot(hclust(distance), main="Dissimilarity = 1 - Correlation", xlab= NA, sub=NA)
Run Code Online (Sandbox Code Playgroud)
我读了很多遍,实际上xlab或sub应该删除标签,但它对我不起作用!
我的情节是这样的:
我正在尝试将以下资源调整到这个问题:
https://matplotlib.org/gallery/pie_and_polar_charts/polar_scatter.html
我似乎无法获得坐标将树状图形状转移到极坐标.
有谁知道如何做到这一点?我知道networkx中有一个实现,但是需要构建一个图形,然后使用pygraphviz后端来获取位置.
有没有办法将树状图笛卡尔坐标转换为极坐标matplotlib和numpy?
import requests
from ast import literal_eval
import matplotlib.pyplot as plt
import numpy as np
def read_url(url):
r = requests.get(url)
return r.text
def cartesian_to_polar(x, y):
rho = np.sqrt(x**2 + y**2)
phi = np.arctan2(y, x)
return(rho, phi)
def plot_dendrogram(icoord,dcoord,figsize, polar=False):
if polar:
icoord, dcoord = cartesian_to_polar(icoord, dcoord)
with plt.style.context("seaborn-white"):
fig = plt.figure(figsize=figsize)
ax = fig.add_subplot(111, polar=polar)
for xs, ys in zip(icoord, dcoord):
ax.plot(xs,ys, color="black")
ax.set_title(f"Polar= {polar}", fontsize=15)
# Load the dendrogram data …Run Code Online (Sandbox Code Playgroud) python plot dendrogram polar-coordinates cartesian-coordinates
我使用seaborn clustermap基于spearman的相关矩阵创建了一个热图,如下所示:我想绘制树状图。我希望树状图看起来像这样: dendrogram but on the heatmap
我创建了一个颜色字典,如下所示,但出现错误:
def assign_tree_colour(name,val_dict,coding_names_df):
ret = None
if val_dict.get(name, '') == 'Group 1':
ret = "(0,0.9,0.4)" #green
elif val_dict.get(name, '') == 'Group 2':
ret = "(0.6,0.1,0)" #red
elif val_dict.get(name, '') == 'Group 3':
ret = "(0.3,0.8,1)" #light blue
elif val_dict.get(name, '') == 'Group 4':
ret = "(0.4,0.1,1)" #purple
elif val_dict.get(name, '') == 'Group 5':
ret = "(1,0.9,0.1)" #yellow
elif val_dict.get(name, '') == 'Group 6':
ret = "(0,0,0)" #black
else:
ret = "(0,0,0)" …Run Code Online (Sandbox Code Playgroud) dendrogram ×10
r ×6
dendextend ×4
python ×4
plot ×3
phylogeny ×2
colors ×1
gplots ×1
heatmap ×1
labels ×1
matplotlib ×1
pandas ×1
scipy ×1
seaborn ×1
traminer ×1