我正在尝试根据标签名称的一部分为树状图的标签着色。标签名称派生自文件夹中的文件名。这些文件.txt文件,并以这种方式命名:167_001.txt前三个数字表示文本的特定作者,最后三个数字区分该作者的单独作品。我想用文件的全名来标记分支,但只根据前 3 个数字为标签着色,这样我就可以看到特定作者的哪些作品可能与其他作者有更多共同点,看看谁影响了谁。这些都是中世纪的作家,所以你不会帮我找到任何可能抄袭某些东西的现代作家。因此,如果文件以 080 开头,我希望所有 080 文件都是一种颜色,无论文件名的最后一部分是什么,也无论它在哪里分组,但我仍然希望文件的结尾部分在标签名称中。这是我到目前为止所拥有的:
# Load data
data(USArrests)
dd <- dist(scale(USArrests), method = "euclidean")
#Perform a cluster analysis on the distance object
hc <- hclust(dd)
#Get the text file names to use as labels
dend <- as.dendrogram(hc)
dend2 = color_unique_labels(dend)
d5gr=color_branches(dend2,5,groupLabels=TRUE)
#plot(d5gr)
plot(d5gr, horiz=TRUE)
如您所见,我正在使用 dendextend 包。如果有人有更好的套餐或可以完成我需要的套餐,那就太好了。我目前拥有的将文件放在相同的颜色系列中,因为它们足够相似,dendextend 提供的"color_unique_labels"功能至少将它们着色为相同颜色的阴影,但它不会使它们具有完全相同的颜色,因此同一作者始终是相同的颜色,然后更容易看到哪些作品与不同的作者有相似之处。见下文。有几百个不同的作者,所以我宁愿不手动为每个作者分配单独的颜色(A ="红色",B ="蓝色",C ="兰花"等),但更喜欢像"color_unique_labels"这样工作的东西,并根据文件名中的前 3 个数字自动选择和分配颜色。我的例子是使用 USArrests 包,我可能想看看如何用第一个字母为州名着色,所以所有的"A"状态和"C"状态等等都是相同的颜色。因此,阿拉巴马州、阿拉斯加州、亚利桑那州和阿肯色州都应该是相同的颜色,加利福尼亚州、科罗拉多州和康涅狄格州也应该是相同的颜色。同样,我更愿意找到一种方法来使其更加自动化,因为我的真实数据集有几百种可能性,而不仅仅是 50 种,但是,如果这是唯一的选择,我不反对。提前感谢!
使用"color_unique_labels"功能进行石斛树状图
希望你的问题现在已经得到了回答。如果这对您仍然有用,这是我解决它的方法:
首先,你创建一个新变量,将作者分组到他们的类别中(你说了一些关于你已经拥有的分类变量的开头)。根据要创建的类别的 nr,您将需要不同的代码,请查看快速 R 重新编码变量部分和本教程 recode(),了解可能适用于您的特定情况的内容。
如果这在 R 中证明很困难,也许可以尝试在 Excel 中生成组变量 - 它有一个很好的过滤功能,可以帮助您快速填写参考代码。对于将来的数据集/数据帧管理,我可以建议将其切成尽可能多的变量: 如果我正确理解您的问题,似乎问题的一部分来自将两个分类变量合二为一(组 + 作者 = 文件名)。
获得组变量("GROUP")后,您需要为其分配颜色集:
library(dendextend)
library(colorspace)
#make GROUP color palette:
GROUP <-dataframe$GROUP #factorize group variable
n_GROUP <- length(unique(GROUP)) #count nr of unique groups
cols <- rainbow_hcl(n_GROUP) #select a number of colors based on GROUP size
col_GROUP <- cols[GROUP] #make color palette assigning the selected colors to the groups
因此,这就是"按类别划分的颜色标签"技巧实际发生的地方:在制作树状图之后,但在绘制树状图之前,您根据树状图(dend)对颜色进行排序:
dend <- as.dendrogram(hc) #hc into dendrogram
#sort GROUP color palette according to dend:
col_GROUP <- col_GROUP[order.dendrogram(dend)]
#plot dendrogram as you would normally do, I did this:
dend <- dend %>%
set("labels_colors", col_GROUP) %>% #change label colors to GROUP
plot(main = "Dendrogram with labels colored according to GROUP")
legend("topleft", legend = levels(GROUP), fill = cols, cex = 0.5)
这应该根据标签的组类别为标签着色。如果您也想更改标签名称(即将分析所需的唯一名称更改为更大的类别名称),也可以执行类似的操作。您只需根据 dend 对 GROUP 因子进行排序,并在绘制为 GROUP 时设置标签(有关绘图选项,请参阅 R 帮助中的 dendextended::set)。
希望这有帮助, 干杯!