You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:grid.arrange多图统一轴标题+强制非科学计数法

解决方案

一、修复Y轴科学计数格式问题

你用label_comma()导致标签异常,是因为该函数会直接处理轴刻度的原始数值(即你设置的-4/-3等),而非你期望显示的0.0001这类转换后的值。可以用两种方式解决:

  • 方式1:直接指定字符串格式的标签,避免ggplot自动转换
scale_y_continuous(breaks = c(-4,-3,-2,-1),
                   labels = c("0.0001", "0.001", "0.01", "0.1"))
  • 方式2:用scales::number()强制禁用科学计数法生成标签
library(scales)
scale_y_continuous(breaks = c(-4,-3,-2,-1),
                   labels = number(c(0.0001,0.001,0.01,0.1), scientific = FALSE))

二、添加统一居中的全局轴标题

你之前误写的textGrub正确函数是grid::textGrob()。需要先隐藏两个子图的独立轴标题,再在组合图上添加全局标题:

  1. 子图中移除labs()里的x/y轴标题,或者用theme()隐藏;
  2. 用grid.arrange()组合图后,通过grid::grid.text()添加全局标题并调整位置实现居中。

修改后的完整代码

library(ggplot2)
library(gridExtra)
library(grid)
library(scales)
library(fivethirtyeight)

make_linear_regression <- function(){
  # 第一个子图:隐藏自身轴标题
  linear_scat_um <- filtered_data %>%
    ggplot(aes(x = log10(rel_wpm), y= log10(rel_um))) +
    geom_point(alpha = 0.2) +
    geom_smooth(method = lm, color = "red") +
    labs(title = "Voorkomens van 'eh'") +
    theme_fivethirtyeight() +
    theme(axis.title = element_text(),
          plot.title = element_text(colour = "#FF0000"),
          axis.line = element_line(colour = "black"),
          axis.title.x = element_blank(),
          axis.title.y = element_blank()) +
    scale_x_continuous(breaks = c(-2,-1,0,1,2),
                       labels = c(0.01,0.1,1,10,100))+
    scale_y_continuous(breaks = c(-4,-3,-2,-1),
                       labels = number(c(0.0001,0.001,0.01,0.1), scientific = FALSE))
  
  # 第二个子图:同样隐藏自身轴标题
  linear_scat_uhm <- filtered_data %>%
    ggplot(aes(x=log10(rel_wpm), y=log10(rel_uhm))) +
    geom_point(alpha = 0.2) +
    geom_smooth(method = lm, color = "blue") +
    labs(title = "Voorkomens van 'ehm'") +
    theme_fivethirtyeight() +
    theme(axis.title = element_text(),
          plot.title = element_text(colour = "#0000FF"),
          axis.line = element_line(colour = "black"),
          axis.title.x = element_blank(),
          axis.title.y = element_blank()) +
    scale_x_continuous(breaks = c(-2,-1,0,1,2),
                       labels = c(0.01,0.1,1,10,100)) +
    scale_y_continuous(breaks = c(-4,-3,-2,-1),
                       labels = number(c(0.0001,0.001,0.01,0.1), scientific = FALSE))
  
  # 组合两幅图
  grid.arrange(linear_scat_um, linear_scat_uhm, ncol=2)
  
  # 添加全局轴标题
  grid.text("Relatief Aantal Woorden Per Minuut", x=0.5, y=0.03, gp=gpar(fontsize=12))
  grid.text("Hoeveel procent van spraak is 'eh'/'ehm'?", x=0.03, y=0.5, rot=90, gp=gpar(fontsize=12))
}

简化方案(用patchwork包)

如果觉得grid包调整位置麻烦,可改用patchwork包实现更简洁的全局标题控制:

library(patchwork)
# 组合并添加全局标题
(linear_scat_um + linear_scat_uhm) +
  labs(x = "Relatief Aantal Woorden Per Minuut", y = "Hoeveel procent van spraak is 'eh'/'ehm'?") +
  theme(axis.title.x = element_text(hjust=0.5), axis.title.y = element_text(hjust=0.5))

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:16:37