如何使用 ggplot 将树状图中的标签与叶子分开? R

问题描述 投票:0回答:0

我的数据集是:(它的名字是:DATA)

Nombre  A   B   C   D
1   0.317487065 0.080105833 0.317487065 0.080105833
2   0.337148742 0.053371275 0.337148742 0.053371275
3   0.337210344 0.056389774 0.337210344 0.056389774
4   0.344194373 0.225960954 0.344194373 0.225960954
5   0.339156317 0.044302174 0.339156317 0.044302174
6   3.50159873  2.388691934 0.365227704 0.092073109
7   0.342896552 0.034875003 0.342896552 0.034875003
8   3.99096414  2.897307225 0.375053435 0.145918478
9   3.449898846 2.547145089 0.362474284 0.136786172
10  0.351574946 0.087726364 0.351574946 0.087726364
11  0.335758462 0.047560978 0.335758462 0.047560978
12  0.34194982  0.054071999 0.34194982  0.054071999
13  20.84690006 20.5904219  0.271830894 0.19597999
14  3.62878717  2.906453986 0.407155888 0.226578411
15  9.253220063 6.785573234 0.307702679 0.05564688
16  3.975409922 2.855842645 0.451265282 0.183968991
17  0.835666448 0.32766974  0.835666448 0.32766974
18  0.343732197 0.050454187 0.343732197 0.050454187
19  0.376571843 0.380907262 0.376571843 0.380907262
20  3.799185121 2.196848002 0.44979232  0.049209095
21  4.146730471 2.810352601 0.41741361  0.115455036
22  0.337580666 0.208608619 0.337580666 0.208608619
23  0.439886473 0.003390831 0.439886473 0.003390831
24  4.014996746 2.206243065 0.503744425 0.051560273
25  4.363031194 2.115764796 0.581527231 0.024526074
26  0.450128804 0.177247252 0.450128804 0.177247252
27  0.448749406 0.002507035 0.448749406 0.002507035
28  3.902169051 2.179976776 0.472446894 0.044985757
29  4.441057425 1.93217922  0.610263387 -0.016956129
30  0.438709993 0.009346064 0.438709993 0.009346064
31  4.093590144 2.231866013 0.523397442 0.057966384
32  4.242709821 2.51236282  0.560676677 0.128090416
33  0.44237252  0.002006989 0.44237252  0.002006989
34  4.261194313 2.099842807 0.56529765  0.024960105
35  0.509725083 -0.015812422    0.509725083 -0.015812422
36  0.43863081  0.008553772 0.43863081  0.008553772
37  0.491355881 0.000755517 0.491355881 0.000755517
38  1.235431814 0.166629428 1.235431814 0.166629428
39  0.448842536 -0.011402614    0.448842536 -0.011402614
40  9.946913282 6.308281089 0.431487602 0.030320282
41  0.442088879 0.009069936 0.442088879 0.009069936
42  0.425196626 0.032068609 0.425196626 0.032068609
43  4.594290957 2.406770572 0.525971553 0.010270988
44  0.437191359 0.122659342 0.437191359 0.122659342
45  4.400783633 2.434878856 0.600194851 0.10871961
46  0.32940934  0.17274147  0.32940934  0.17274147
47  0.329361065 0.05789888  0.329361065 0.05789888
48  0.440999182 0.009849809 0.440999182 0.009849809
49  0.351818977 0.051988682 0.351818977 0.051988682
50  3.950125738 2.794049342 0.363587609 0.123237958
51  0.440517749 0.0075546   0.440517749 0.0075546
52  0.647100133 0.116234099 0.647100133 0.116234099
53  0.452752963 0.008736226 0.452752963 0.008736226
54  0.475527253 0.014787182 0.475527253 0.014787182
55  4.213146925 3.198432808 0.55328415  0.2996082
56  1.912431005 4.019734951 1.912431005 4.019734951
57  1.456586727 3.202201504 1.456586727 3.202201504
58  0.378878409 0.149616037 0.378878409 0.149616037
59  0.351849549 0.308513019 0.351849549 0.308513019
60  0.330875727 0.025921305 0.330875727 0.025921305
61  0.437401746 -0.014645841    0.437401746 -0.014645841
62  0.24344206  0.429797454 0.24344206  0.429797454
63  0.413267585 0.604092165 0.413267585 0.604092165
64  0.525858227 0.400270378 0.525858227 0.400270378
65  0.842386329 1.752785611 0.842386329 1.752785611

我用 ggplot 绘制的树状图的 R 代码是:(我需要 ggplot,因为它是唯一一个将

LOG10
比例应用于树状图的代码)

df<-read.csv(file="DATA.csv", header=TRUE, sep=";")
rownames(df) <- with(df, sprintf("%d", Nombre))

library(dendextend)
library(ggplot2)
library(ggdendro)
library(plyr)
library(zoo)

cut <- 5    # $Number of clusters
hc <-
  df[,-c(1:2)] %>%
  dist(method = "minkowski") %>%
  hclust(method = "average") %>%
  as.dendrogram() %>%
  color_branches(k =5, groupLabels = c(1,2,3,4,5)) %>%
  assign_values_to_leaves_nodePar(nodePar = "lab.cex", value = 0.5) %>%
  hang.dendrogram(-1) 
dhc <- as.dendrogram(hc)
plot(dhc,horiz = FALSE)

dendr <- dendro_data(dhc, type = "rectangle") 
clust <- cutree(dhc, k = cut)               # find 'cut' clusters
clust.df <- data.frame(label = names(clust), cluster = clust)

# Split dendrogram into upper grey section and lower coloured section
height <- unique(dendr$segments$y)[order(unique(dendr$segments$y), decreasing = TRUE)]
cut.height <- mean(c(height[cut], height[cut-1]))
dendr$segments$line <- ifelse(dendr$segments$y == dendr$segments$yend &
                            dendr$segments$y > cut.height, 1, 2)
dendr$segments$line <- ifelse(dendr$segments$yend  > cut.height, 1, dendr$segments$line)

# Number the clusters
dendr$segments$cluster <- c(-1, diff(dendr$segments$line))
change <- which(dendr$segments$cluster == 1)
for (i in 1:cut) dendr$segments$cluster[change[i]] = i + 1
dendr$segments$cluster <-  ifelse(dendr$segments$line == 1, 1, 
                                  ifelse(dendr$segments$cluster == 0, NA, dendr$segments$cluster))
dendr$segments$cluster <- na.locf(dendr$segments$cluster) 

# Positions for cluster labels
n.rle <- rle(dendr$segments$cluster)
N <- cumsum(n.rle$lengths)
N <- N[seq(1, length(N), 2)] + 1
N.df <- dendr$segments[N, ]
N.df$cluster <- N.df$cluster - 1

# Plot the dendrogram
ggplot() + 
  geom_segment(data = segment(dendr), 
               aes(x=x, y=y, xend=xend, yend=yend, size=factor(line), colour=factor(cluster)), 
               lineend = "square", show.legend = FALSE) + 
  scale_colour_manual(values = c("grey60", rainbow(cut))) +
  scale_size_manual(values = c(.1, 1)) +
  geom_text(data = N.df, aes(x = x, y = y, label = factor(cluster),  colour = factor(cluster + 1)), 
            hjust = 1.5, show.legend = FALSE) +
  geom_text(data = dendr$label, aes(x, y, label = label), 
                      hjust = 0.2, angle= 90, size = 3.25, show.legend = FALSE) +
  labs(x = NULL, y = NULL) +
  scale_y_log10() +
  theme(axis.line.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank(),
        axis.title.y = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        panel.background = element_rect(fill = "white"),
        panel.grid = element_blank())

我得到的树状图是:

我的问题是如何将标签与树叶分开?

我试过:

label.offset = 10
hang.dendrogram(-1)
。但是,它们都不能在
ggplot
中工作。我还尝试按照建议在每个标签前后添加空格。但是,它都没有用。

r ggplot2 dendrogram
© www.soinside.com 2019 - 2024. All rights reserved.