1

是否可以使用 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()

在此处输入图像描述

额外问题:为什么在上面的示例中没有显示状态标签?

4

2 回答 2

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))])

在此处输入图像描述

于 2012-09-23T10:16:17.937 回答
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))
于 2012-09-23T13:13:25.270 回答