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

如何在ggplot2中按年份正确排序分面图的Y轴(研究维度)

解决ggplot2中研究按年份排序的问题

要让Y轴研究按「顶部最早、底部最新」的顺序排列,核心是先为每个研究确定可靠的年份(优先从Study名称提取最晚年份,无则回退到Year字段),再将Study转换为指定顺序的因子,具体实现如下:

1. 提取可靠年份并生成排序后的研究列表

使用stringr包从Study名称中提取4位数字年份,取最大值;如果没有提取到年份,就用数据中的Year字段:

library(stringr)
library(dplyr)

# 定义年份提取函数
get_reliable_year <- function(study_name, fallback_year) {
  extracted_years <- str_extract_all(study_name, "\\b\\d{4}\\b")[[1]] %>% as.integer()
  if (length(extracted_years) > 0) max(extracted_years) else fallback_year
}

# 为数据集添加可靠年份列
data <- data %>%
  mutate(reliable_year = mapply(get_reliable_year, Study, Year))

# 按可靠年份升序排序,提取唯一的研究名称(最早的在前)
sorted_study_order <- data %>%
  arrange(reliable_year) %>%
  pull(Study) %>%
  unique()

# 将Study转换为因子,指定levels为排序后的顺序
data$Study <- factor(data$Study, levels = sorted_study_order)

2. 用ggplot2绘制图表

此时直接使用因子化后的Study作为Y轴,ggplot2会自动按照因子levels的顺序渲染Y轴(从上到下为最早到最新的研究):

library(ggplot2)

ggplot(data, aes(x = Residue_Position, y = Study)) +
  geom_point(size = 2) # 根据你的需求替换为geom_jitter/geom_segment等几何对象
  labs(x = "残基位置", y = "研究") +
  theme_classic()

常见问题修正

  • 之前用mixedorder无效,是因为它是对字符串的混合排序,而非基于年份数值的逻辑排序,直接提取年份做数值排序更精准。
  • 若需要Y轴顶部为最新研究,只需将sorted_study_order反转:levels = rev(sorted_study_order)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:03:15