3

我需要显示聚类的结果。有关演示,请参阅

library(ggplot2)
df = data.frame(cluster=c(1,1,2,2,2,3),states=c("AB","IN","UN","CH","LO","OK"))
p2<-ggplot(df,aes(x=1,y=states,fill=factor(cluster)))+
    geom_tile()+
    geom_text(aes(label=cluster))
p2

在此处输入图像描述

我怎样才能

  1. 将具有相同聚类数的图块放在一起?
  2. 每个集群只显示 1 个集群号?

我上面的代码是可重现的,如果您可以稍微调整一下,我将不胜感激。谢谢。

4

2 回答 2

6

您可以根据具有功能的集群更改因子水平的顺序reorder()

df$states<-reorder(df$states,df$cluster)

然后使用重新排序的数据,制作新的数据框,pos将其计算为states转换为数字的平均位置。

library(plyr)
df2<-ddply(df,.(cluster),summarise,pos=mean(as.numeric(states)))

现在使用新的数据框添加标签。

ggplot(df,aes(x=1,y=states,fill=factor(cluster)))+
      geom_tile()+
      geom_text(data=df2,aes(y=pos,label=cluster))

在此处输入图像描述

于 2015-10-13T08:38:32.270 回答
1

另一种方法是使用scale_y_discrete设置图块的顺序并使用空白标签以geom_text使每个图块只有一个标签。

这可以解决问题:

ggplot(df,aes(x=1,y=states,fill=factor(cluster)))+
  geom_tile()+
  geom_text(aes(label=c('1', '', '', '', '2', '3')))+
  scale_y_discrete(limits=c("AB", "IN", "CH", "LO", "UN", "OK"))

在此处输入图像描述

请注意,标签不会位于集群中偶数个元素的中间。它将在您选择的位置。

于 2015-10-13T08:50:50.987 回答