R ggplot2:将文本添加到 geom_tiles
R ggplot2: add text to geom_tiles
我需要显示聚类的结果。演示请看
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 个簇数?
我上面的代码是可重现的,如果您能稍微调整一下,我将不胜感激。谢谢
您可以使用函数 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))
另一种方法是使用 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"))
请注意,标签不会位于簇中偶数个元素的中间。它将位于您选择的位置。
我需要显示聚类的结果。演示请看
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 个簇数?
我上面的代码是可重现的,如果您能稍微调整一下,我将不胜感激。谢谢
您可以使用函数 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))
另一种方法是使用 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"))
请注意,标签不会位于簇中偶数个元素的中间。它将位于您选择的位置。