我正在尝试根据标签名称的一部分为树形图的标签着色。标签名称源自文件夹中的文件名。这些文件是.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,但是,如果这是唯一的选择,我不反对。提前谢谢!
答案 0 :(得分:1)
希望你的问题现在得到解答。如果这对你仍然有用,请点击这里解决问题:
首先,您创建一个新的变量,将作者分类在他们的类别中(您说的是您已经拥有的分类变量的开头)。根据想要创建的类别的数量,您需要使用不同的代码,请查看Quick R Recoding variables section和此tutorial on recode()以了解可能适用于您的特定情况的内容。
如果在R中证明这很困难,可以尝试在Excel中生成组变量 - 它具有良好的过滤功能,可以帮助您快速填写参考代码。对于未来的数据集/数据帧管理,我建议你在实际拥有的变量中加入它:如果我正确理解你的问题,似乎问题的一部分来自于在一个中有两个分类变量(group + author = filename) 。
一旦您获得了组变量(&#34; GROUP&#34;),您需要为其分配颜色集:
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
所以这里是按照类别&#39;颜色标签的地方。诀窍实际发生:在您完成树形图之后 之前绘制树形图根据树形图(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)。
希望这有帮助, 干杯!