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

如何在ggplot点图中按Q2类别的Delay值重排序y轴分类

解决方案

你的核心需求是y轴的星期分类仅按第二季度(Q2)的Delay值升序排列,最小值在y轴底部、最大值在顶部。原有代码的问题是fct_reorder(Weekday, Delay)默认使用所有季度的Delay值的中位数排序,才会出现按Q1排序的情况。

修改后的完整可运行代码如下:

library(tidyverse)

# 示例数据,set.seed用于复现结果,可自行删除
set.seed(123)
df <- data.frame(
  Weekday = c("Fri", "Tues", "Mon", "Thurs","Mon", "Tues", "Wed", "Fri","Wed", "Thurs", "Fri"),
  Quarter = c(rep("Q1", 3), rep("Q2", 5), rep("Q3",3)),
  Delay = runif(11, -2,5),
  pval = runif(11, 0,1))
df$Quarter <- factor(df$Quarter, levels = c("Q1", "Q2", "Q3"))

# 关键步骤:按Q2的Delay升序设置Weekday的因子水平
q2_sort <- df %>%
  filter(Quarter == "Q2") %>%
  arrange(Delay) %>%
  pull(Weekday)
df$Weekday <- factor(df$Weekday, levels = q2_sort)

# 绘图代码,删除了原有冗余的group_by语句
df %>%
  ggplot(aes(x = Quarter, y = Weekday)) + 
  geom_point(aes(size = -log10(pval), color = Delay), alpha = 0.8) +
  scale_size_binned(range = c(-2, 12)) +
  scale_color_gradient(low = "mediumblue", high = "red2", space = "Lab")  + 
  theme_bw() +
  theme(axis.text.x = element_text(angle = 25, hjust = 1, size = 10)) +
  ylab(NULL) + xlab(NULL)

补充说明:

  • 如果部分星期在Q2没有对应观测,可以在设置levels时补充levels = c(q2_sort, 其他缺失的星期值)自定义缺失值的位置
  • 如果Q2中同一个星期有多个Delay值,可以在arrange前先按Weekday分组取Delay的均值/中位数再排序,避免重复值影响顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:21:00