1

我正在尝试根据标签名称的一部分为树状图的标签着色。标签名称源自文件夹中的文件名。这些文件是 .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 种,但是,如果这是唯一的选择,我不反对。提前致谢!所以所有的“A”状态和“C”状态等等都是相同的颜色。所以阿拉巴马州、阿拉斯加州、亚利桑那州和阿肯色州都应该是同一种颜色,而加利福尼亚州、科罗拉多州和康涅狄格州也应该是同一种颜色。同样,我更愿意找到一种方法使其更加自动化,因为我的真实数据集有几百种可能性,而不仅仅是 50 种,但是,如果这是唯一的选择,我不反对。提前致谢!所以所有的“A”状态和“C”状态等等都是相同的颜色。所以阿拉巴马州、阿拉斯加州、亚利桑那州和阿肯色州都应该是同一种颜色,而加利福尼亚州、科罗拉多州和康涅狄格州也应该是同一种颜色。同样,我更愿意找到一种方法使其更加自动化,因为我的真实数据集有几百种可能性,而不仅仅是 50 种,但是,如果这是唯一的选择,我不反对。提前致谢!

使用“color_unique_labels”函数扩展树状图

4

1 回答 1

1

希望您的问题现在已经得到解答。如果这对您仍然有用,这是我解决它的尝试:

首先,您创建一个新变量,将作者分组到他们的类别中(您说了一些关于您已经拥有的类别变量的开头)。根据要创建的类别的数量,您将需要不同的代码,请查看Quick R Recoding variables 部分和本教程关于 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)

这应该根据他们的组类别为您的标签着色。如果您也想更改标签名称(即将分析所需的唯一名称更改为更大的类别名称),可以执行类似的操作。您只需在绘制到 GROUP 时根据 dend 和设置标签对 GROUP 因子进行排序(请参阅 R 帮助中的 dendextended::set 以获取绘图选项)。

希望这会有所帮助,干杯!

于 2017-07-06T15:20:57.740 回答