You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何调整ggplot2分面标签位置?将指定标签移至绘图左侧

实现分面标签分置左侧/顶部的方案

当然可以实现这个需求!你当前用的facet_wrap()会把所有分面标签都放在同一方向(默认顶部),要实现一个标签在左侧、一个在顶部,最简单的方式是换成facet_grid()——它专门用来控制行、列分面的独立布局,行标签默认显示在左侧,列标签默认显示在顶部,完美匹配你的需求。

下面是修改后的完整代码,我标注了关键调整点:

library(ggplot2)
library(ggsci)
library(ggthemes)
library(ggh4x)

df <- data.frame(x=c(0,0,0.3,0.8,1.5,3,5,7,9,13,15,20,28), 
                 y=c(0,0,0.3,0.8,1.5,3,5,7,9,13,15,20,28))
df$Method <- "Pearson"
df$ID <- "A"

Plot <- ggplot(df, aes(x=x, y=y)) + 
  geom_point(size=.8) + 
  theme_hc() + 
  theme(
    strip.background = element_rect(colour = "black", fill = "white", size = 1.5, linetype = "solid"),
    axis.title.x =element_blank(), 
    axis.title.y =element_blank(), 
    axis.text.x = element_text(angle = 0, hjust = 0.5,size = 10.5, face="bold"), 
    axis.text.y = element_text(angle = 0, hjust = 0.5,size = 10.5), 
    strip.text.x = element_text(size = 9), 
    # 调整左侧标签的显示角度,让文字横向居中(默认是垂直的,可选调整)
    strip.text.y = element_text(size = 13, angle = 0, hjust = 0.5), 
    axis.line = element_line(), 
    panel.grid.major= element_blank(), 
    panel.grid.minor = element_blank(), 
    legend.text=element_text(size=9), 
    legend.title = element_text(size=10,face="bold"), 
    legend.key=element_blank(), 
    legend.justification = c(0.5,0), 
    legend.position = "right", 
    panel.border = element_blank(), 
    strip.placement = "outside", 
    plot.title = element_text(size = 16, hjust = 0.5), 
    strip.switch.pad.grid = unit('0.1', "cm")
  ) + 
  labs(x= '\nTime delay (modifiable device)',y=expression(R^{2})) + 
  guides(color=guide_legend(override.aes=list(fill=NA))) + 
  scale_y_continuous(limits = c(0., 30), breaks = c(5, 15,25)) + 
  # 核心修改:用facet_grid指定行/列分面,ID作为行(左侧标签),Method作为列(顶部标签)
  facet_grid(ID ~ Method) + 
  scale_color_jco()

Plot

关键说明:

  • facet_grid(ID ~ Method):公式中~左侧的变量(ID)会作为行分面,标签自动显示在绘图左侧;右侧的变量(Method)作为列分面,标签显示在顶部。
  • 如果你觉得左侧标签默认的垂直文字看着别扭,我在strip.text.y里加了angle = 0,让文字横向居中显示,和你原来的设置风格保持一致。

备选方案(用ggh4x的facet_wrap2):

如果你因为分面数量多等原因坚持想用facet_wrap,可以利用你已经加载的ggh4x包的facet_wrap2()功能,通过strip.position参数分别指定每个变量的标签位置:

facet_wrap2(Method~ID, strip.position = c("top", "left"))

不过对于你当前的单分面场景,facet_grid是更直观、更轻量化的选择。

内容的提问来源于stack exchange,提问作者Dekike

火山引擎 最新活动