使用ggdendro选择树形图的子部分

时间:2012-09-22 14:42:14

标签: r plot ggplot2 dendrogram

是否可以使用ggdendro绘制直方图的子部分。例如,如何在以下示例中仅绘制最左侧的群集:

require(ggplot2)

hc <- hclust(dist(USArrests), "ave")
dhc <- as.dendrogram(hc)

ddata <- dendro_data(dhc, type="rectangle")

ggplot(segment(ddata),labels=rownames(USArrests))+ 
geom_segment(aes(x=x, y=y, xend=xend, yend=yend))+ 
theme_dendro()

enter image description here

红利问题:为什么上面的例子中没有显示州标签?

2 个答案:

答案 0 :(得分:2)

数据:

hc <- hclust(dist(USArrests), "ave")
dhc <- as.dendrogram(hc)
library(ggdendro)
ddata <- dendro_data(dhc, type="rectangle")

为应绘制的数据创建索引(左侧群集):

index <- seq(3, which(ddata$segment$y[-c(1, 2)] == ddata$segment$y[1])[2])

绘图(包括x轴标签):

library(ggplot2)

ggplot(segment(ddata)[index, ]) + 
  geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) + 
  scale_x_discrete(labels = ddata$label$label[seq(sum(ddata$segment$yend == 0))])

enter image description here

答案 1 :(得分:2)

@Elizabeth:您的原始代码可以修改如下,以查看x标签:

require(ggplot2)
hc <- hclust(dist(USArrests), "ave")
ddata <- dendro_data(hc, type="rectangle")
ggplot() + 
geom_segment(data=segment(ddata), aes(x=x, y=y, xend=xend, yend=yend)) + 
geom_text(data=label(ddata), aes(x=x, y=y, label=label, hjust=0), size=3) +
coord_flip() + scale_y_reverse(expand=c(0.2, 0))