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

在R的ggplot2中修改Y轴显示内容并保留分面排序

解决方案:分面内按delta排序并显示my_var2为Y轴标签

核心思路是直接让my_var2成为按delta升序排列的因子,这样既保留分面内的排序逻辑,Y轴也能直接显示my_var2的原始值,不需要额外拼接标签再提取。

修改后的完整代码:

library(ggplot2)
library(dplyr)
library(forcats)

## 初始化数据 --------------------------------------
set.seed(123)  # 设置随机种子保证可复现
levels <- c('KAMALA-IT', 'HARRIS-HR', 'DONALD-CEO', 'TRUMP-HR', 'BARACK-IT')
my_var <- sample(levels, 50, replace = TRUE)
levels2 <- c('GEORGIA', 'PENNSYLVANIA', 'WINSCOSIN', 'NORTH CAROLINA', 'NEVADA','ARIZONA','MICHIGAN')
my_var2 <- sample(levels2, 50, replace = TRUE)
delta <- rnorm(50, mean = 0, sd = 1) 

df <- tibble(my_var, my_var2, delta)

# 关键处理:分组后按delta升序排列,将my_var2转为对应顺序的因子
df <- df |>
  group_by(my_var) |>
  arrange(delta, .by_group = TRUE) |>
  mutate(my_var2 = fct_inorder(my_var2))  # 按当前行顺序设置因子水平

ggplot(df, aes(x = delta, y = my_var2)) +
  geom_point(colour = "red") +
  facet_wrap(~my_var, dir = "v", ncol = 1, scales = "free_y")

关键步骤说明

  • group_by(my_var):按分面变量分组,保证每个分面内独立排序
  • arrange(delta, .by_group = TRUE):在每个分组内按delta从小到大排序
  • fct_inorder(my_var2):将my_var2转换为因子,因子的水平顺序就是排序后的行顺序,ggplot会遵循这个顺序渲染Y轴
  • 去掉了原代码中拼接labels列和scale_y_discrete的标签提取逻辑,直接用处理后的my_var2作为Y轴映射,Y轴自然显示原始的州名

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:05