2

我按照我在网上找到的先前代码做了一个聚类树状图,但是图中没有显示 x 轴。我想在 x 轴上显示差异值,但我没有成功。

females<-cervidae[cervidae$Sex=="female",]
dstf   <- daisy(females[,9:14], metric = "euclidean", stand = FALSE)
hcaf   <- hclust(dstf, method = "ave")
k     <- 3
clustf <- cutree(hcaf,k=k)  # k clusters


dendrf    <- dendro_data(hcaf, type="rectangle") # convert for ggplot
clust.dff <- data.frame(label=rownames(females), cluster=factor(clustf), 
females$Genus, females$Species) 
dendrf[["labels"]]   <- merge(dendrf[["labels"]],clust.dff, by="label")
rectf <- aggregate(x~cluster,label(dendrf),range)
rectf <- data.frame(rectf$cluster,rectf$x)
ymax <- mean(hcaf$height[length(hcaf$height)-((k-2):(k-1))])


fem=ggplot() + 
   geom_segment(data=segment(dendrf), aes(x=x, y=y, xend=xend, yend=yend)) + 
   geom_text(data=label(dendrf), aes(x, y, label= females.Genus, hjust=0, 
   color=females.Genus),
        size=3) +
   geom_rect(data=rectf, aes(xmin=X1-.3, xmax=X2+.3, ymin=0, ymax=ymax), 
        color="red", fill=NA)+
   coord_flip() + scale_y_reverse(expand=c(0.2, 0)) + 
   theme_dendro() + scale_color_discrete(name="Genus") + 
   theme(legend.position="none")

这是我的树状图的样子:

在此处输入图像描述

4

1 回答 1

3

您包含的代码theme_dendro(),在其帮助文件中描述为:

通过返回面板网格、面板背景、轴标题、轴文本、轴线和轴刻度的空白主题元素,将大多数 ggplot 选项设置为空白。

您强制 x 轴线/文本/刻度在以下位置可见theme()

ggplot() + 
  geom_segment(data=segment(dendrf), aes(x=x, y=y, xend=xend, yend=yend)) +
  geom_text(data=label(dendrf), aes(x, y, label= label, hjust=0,
                                    color=cluster),
            size=3) +
  geom_rect(data=rectf, aes(xmin=X1-.3, xmax=X2+.3, ymin=0, ymax=ymax),
            color="red", fill=NA)+
  coord_flip() +
  scale_y_reverse(expand=c(0.2, 0)) + 
  theme_dendro() +
  scale_color_discrete(name="Cluster") +
  theme(legend.position="none",
        axis.text.x = element_text(),  # show x-axis labels
        axis.ticks.x = element_line(), # show x-axis tick marks
        axis.line.x = element_line())  # show x-axis lines

格登德罗

(此演示使用内置数据集,因为我不确定什么是 cervidae。用于创建此的代码复制如下:)

library(cluster); library(ggdendro); library(ggplot2)

hcaf   <- hclust(dist(USArrests), "ave")
k     <- 3
clustf <- cutree(hcaf,k=k)  # k clusters

dendrf    <- dendro_data(hcaf, type="rectangle") # convert for ggplot
clust.dff <- data.frame(label=rownames(USArrests), 
                        cluster=factor(clustf)) 
dendrf[["labels"]]   <- merge(dendrf[["labels"]],clust.dff, by="label")
rectf <- aggregate(x~cluster,label(dendrf),range)
rectf <- data.frame(rectf$cluster,rectf$x)
ymax <- mean(hcaf$height[length(hcaf$height)-((k-2):(k-1))])
于 2017-09-12T14:11:02.940 回答