Facet_wrap 标签作为 ggplot 中的面板标签

问题描述

我正在研究一个基因表达谱图,我已经按簇数对谱进行了分面。我已经能够使情节非常接近我正在寻找的内容,但我希望能够使用每个相应绘图区域右上角的面板标签来实现这一点。

这是我的数据:

structure(list(time_point = c("10","10","13","24","35","35"),cluster = c("1","2","3","4","5","6","7","8","9","1","9"),mean_value = c(-0.426083520451465,0.604608926627412,0.76451364891251,-0.471139779941961,0.2351694555588,-0.705679926146899,-0.454858199321039,-0.165115160845773,0.724407409818679,0.781438905910975,0.146965540891108,-0.769313576080577,-0.364131220020667,-0.977858147148868,0.723255456138281,1.27112335113834,-0.32602591779613,-0.411066723030554,-0.229664052498654,-0.854136058469294,-0.66018500031545,1.2563451985156,0.544812333405859,0.693110024751582,-0.350948607542015,-0.424710073864252,-0.160578456515796,-0.125691332960858,0.102561590950772,0.664984927483517,-0.421074198552966,0.197876358184206,-0.710685554742966,-0.465316544275294,0.915851152506157,-0.15276223027233),sd = c(0.0492840366570553,0.51236309986752,0.0969492719939365,0.0586339372406152,0.0929657760623659,0.0473263114084479,0.0276800874550852,0.0735227878362672,1.0416084268533,1.1513324603848,0.193252849305954,0.0172156507400275,0.0327622261605831,0.0538099322569242,0.109168493202137,0.481243962369782,0.0826879496732078,0.0388480633488431,0.159249818818607,0.0417074333259725,0.042500837893243,0.0527404368558342,0.0688903901671137,0.0593712415929212,0.0152356442432683,0.0577220450239637,0.0930169866292114,0.204810043584311,0.177841591444567,0.236871574361693,0.0369824877579054,0.210415560702688,0.067153094681514,0.043764627685752,0.429144691634867,0.0203773261748577)),row.names = c(NA,-36L),groups = structure(list(time_point = c("10",.rows = structure(list(1:9,10:18,19:27,28:36),ptype = integer(0),class = c("vctrs_list_of","vctrs_vctr","list"))),4L),class = c("tbl_df","tbl","data.frame"),.drop = TRUE),class = c("grouped_df","tbl_df","data.frame"))

以及我当前的 ggplot 代码

# Adjustments to ggplot theme
Alex_Theme = theme_bw() +
  theme(plot.title = element_text(hjust = 0.5,face='plain',size = 12)) +
  theme(plot.title = element_text(vjust=0)) +
  theme(plot.subtitle=element_text(size=10,hjust=0.5,face="italic",color="black")) +
  #theme(legend.position= "none") +
  theme(panel.border = element_rect(fill=NA,colour = "black",size=0.5)) +
  theme(axis.text = element_text(face = "plain",size = 12)) +
  theme(axis.title.x = element_text(margin = margin(t = 6,r = 20,b = 0,l = 0))) +
  theme(axis.title.y = element_text(margin = margin(t = 0,r = 6,l = 0))) +
  #theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()) +
  theme(axis.title = element_text(face="plain",size = 12))

# colorblind pallet :)
cbPalette <- c("#000000","#E69F00","#56B4E9","#009E73","#F0E442","#0072B2","#D55E00","#CC79A7","red")

# named vector of labels for facet
facet_labels <- c("A.","B.","C.","D.","E.","F.","G.","H.","I.")
names(facet_labels) <- c("1","9")

# plotting
ggplot(centroids_long_summary,aes(x=time_point,y=mean_value,group=cluster,colour=as.factor(cluster))) + 
  Alex_Theme +
  # Facet_Theme +
  geom_line() +
  geom_point(size = 1) +
  geom_errorbar(aes(ymin= mean_value - sd,ymax= mean_value + sd),width=0.1) +
  ylab("Gene expression") +
  xlab("Developmental stage") +
  scale_x_discrete(labels = c("Pre","Dia-C","Quies","Post")) +
  scale_color_manual(name = "Cluster",values = cbPalette) +
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()) +
  theme(legend.position= "none") +
  facet_wrap(.~cluster,ncol = 3,labeller = labeller(cluster = facet_labels)
             ) +
  theme(strip.background = element_rect(fill = "white",color = "white"),strip.text.x = element_text(hjust = 0,size = 12)) 

产生这样的东西:

enter image description here

但是,我想尝试在绘图区域内获取面板标签(最好不要在每行之间留下空白的刻面标签)。

解决方法

我添加了一个 geom_text 层,它只看到每个集群的一行(否则数据中的每一行的文本都会被过度绘制),并将构面名称隐藏在 theme(strip.text.x = ...) 中。

ggplot(centroids_long_summary,aes(x=time_point,y=mean_value,group=cluster,colour=as.factor(cluster))) + 
  Alex_Theme +
  # Facet_Theme +
  geom_line() +
  geom_point(size = 1) +
  geom_errorbar(aes(ymin= mean_value - sd,ymax= mean_value + sd),width=0.1) +
  geom_text(data = centroids_long_summary %>% 
              group_by(cluster) %>%
              slice(1) %>%
              mutate(label = paste0(LETTERS[as.numeric(cluster)],".")),aes(label = label,x = 0.8,y = 1.8),color = "black",fontface = "bold") +
  ylab("Gene expression") +
  xlab("Developmental stage") +
  scale_x_discrete(labels = c("Pre","Dia-C","Quies","Post")) +
  scale_color_manual(name = "Cluster",values = cbPalette) +
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()) +
  theme(legend.position= "none") +
  facet_wrap(.~cluster,ncol = 3) +
  theme(strip.text.x = element_blank(),strip.background = element_rect(fill = "white",color = "white"))

enter image description here