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

如何在ggplot2中为每个分面设置自定义X轴刻度标签

为ggplot2分面图设置自定义X轴标签(独立于数据集)

需求说明

可视化不同实验条件和参与者组的自定步速阅读数据时,每个分面对应不同句子,需要将X轴的Position数值替换为手动指定的句子单词标签,且标签内容无需存在于原始数据集中。

解决方案

借助ggh4x包的facetted_pos_scales功能,实现分面单独配置X轴刻度与标签:

步骤1:安装并加载依赖包

install.packages("ggh4x") # 首次使用需执行安装
library(ggplot2)
library(dplyr)
library(ggh4x)

步骤2:构建分面专属的X轴刻度规则

将每个分面的Position值(-5到3)与对应的自定义标签绑定:

scale_list <- lapply(names(custom_labels), function(facet_name) {
  scale_x_continuous(
    breaks = -5:3, # 匹配数据中的Position取值
    labels = custom_labels[[facet_name]] # 绑定对应分面的自定义单词标签
  )
})
names(scale_list) <- names(custom_labels)

步骤3:修改绘图代码,应用分面刻度

在原绘图逻辑中添加facetted_pos_scales,替换默认的分面X轴设置:

完整可复现代码

library(ggplot2)
library(dplyr)
library(ggh4x)

# 模拟数据集
reading_data_clean <- tibble::tibble(
  Position = rep(-5:3, times = 6),
  Read_time = rnorm(54, mean = 500, sd = 50),
  Subcondition = rep(c("ANE", "AR", "ENE", "ER", "agreement", "non-agreement"), each = 9),
  Language = rep(c("Danish", "German"), each = 27),
  Condition = rep(c("a-verb", "definite", "num.agreement"), each = 9, times = 2),
  Facet = rep(c("Danish-a-verb", "Danish-definite", "Danish-num.agreement", 
                "German-a-verb", "German-definite", "German-num.agreement"), each = 9)
)

# 每个分面的自定义X轴标签
custom_labels <- list(
  "Danish-a-verb" = c("hunden", "bjeffer", "hele", "natten", "fordi", "katten", "løb", "på", "..."),
  "Danish-definite" = c("stenen", "lå", "ved", "floden", "og", "var", "markant", "stor", "..."),
  "Danish-num.agreement" = c("de", "fleste", "bøger", "er", "ikke", "tilgængelige", "for", "alle", "..."),
  "German-a-verb" = c("der", "Hund", "bellt", "die", "ganze", "Nacht", "weil", "die", "Katze"),
  "German-definite" = c("der", "Stein", "lag", "am", "Fluss", "und", "war", "sehr", "groß"),
  "German-num.agreement" = c("die", "meisten", "Bücher", "sind", "nicht", "für", "alle", "verfügbar", "...")
)

# 构建分面X轴刻度列表
scale_list <- lapply(names(custom_labels), function(facet_name) {
  scale_x_continuous(
    breaks = -5:3,
    labels = custom_labels[[facet_name]]
  )
})
names(scale_list) <- names(custom_labels)

# 绘制图形
plot <- ggplot(reading_data_clean, 
               aes(x = Position, y = Read_time, color = Subcondition, group = Subcondition)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  facet_wrap(~ Facet, scales = "free_x") +
  facetted_pos_scales(x = scale_list) +
  labs(
    title = "分面专属自定义X轴标签",
    x = "句子位置",
    y = "阅读时长(毫秒)",
    color = "子条件"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
    strip.text = element_text(size = 14, face = "bold"),
    legend.position = "bottom"
  )

print(plot)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:14:53