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

如何让ggplot图表X轴按Variac_2019时序排序并显示Mes1_Any标签

问题描述

我需要创建一个图表,要求按Variac_2019列的时间顺序排序,但X轴要显示Mes1_Any列的标签。当前在RStudio中生成的图表X轴是按字母顺序排列的,请问如何实现X轴显示Mes1_Any标签且按Variac_2019时序排序?

数据集

structure(list(Mes1_Any = c("Gen.2020", "Feb.", "Març", "Abril", 
"Maig", "Juny", "Jul.", "Ag.", "Set.", "Oct.", "Nov.", "Des.", 
"Gen.2021", "Feb.", "Març", "Abril", "Maig", "Juny", "Jul.", 
"Ag.", "Set.", "Oct.", "Nov.", "Des.", "Gen.2022", "Feb.", "Març", 
"Abril", "Maig", "Juny", "Jul.", "Ag.", "Gen.2020", "Feb.", "Març", 
"Abril", "Maig", "Juny", "Jul.", "Ag.", "Set.", "Oct.", "Nov.", 
"Des.", "Gen.2021", "Feb.", "Març", "Abril", "Maig", "Juny", 
"Jul.", "Ag.", "Set.", "Oct.", "Nov.", "Des.", "Gen.2022", "Feb.", 
"Març", "Abril", "Maig", "Juny", "Jul.", "Ag."), Variac_2019 = c("2020_01", 
"2020_02", "2020_03", "2020_04", "2020_05", "2020_06", "2020_07", 
"2020_08", "2020_09", "2020_10", "2020_11", "2020_12", "2021_01", 
"2021_02", "2021_03", "2021_04", "2021_05", "2021_06", "2021_07", 
"2021_08", "2021_09", "2021_10", "2021_11", "2021_12", "2022_01", 
"2022_02", "2022_03", "2022_04", "2022_05", "2022_06", "2022_07", 
"2022_08", "2020_01", "2020_02", "2020_03", "2020_04", "2020_05", 
"2020_06", "2020_07", "2020_08", "2020_09", "2020_10", "2020_11", 
"2020_12", "2021_01", "2021_02", "2021_03", "2021_04", "2021_05", 
"2021_06", "2021_07", "2021_08", "2021_09", "2021_10", "2021_11", 
"2021_12", "2022_01", "2022_02", "2022_03", "2022_04", "2022_05", 
"2022_06", "2022_07", "2022_08"), Territori = c("Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Catalunya", "Catalunya", "Catalunya", "Catalunya", 
"Catalunya", "Espanya", "Espanya", "Espanya", "Espanya", "Espanya", 
"Espanya", "Espanya", "Espanya", "Espanya", "Espanya", "Espanya", 
"Espanya", "Espanya", "Espanya", "Espanya", "Espanya", "Espanya", 
"Espanya", "Espanya", "Espanya", "Espanya", "Espanya", "Espanya", 
"Espanya", "Espanya", "Espanya", "Espanya", "Espanya", "Espanya", 
"Espanya", "Espanya", "Espanya"), Alimentació = c(-4.76190476190477, 
-4.51745379876797, -0.196850393700776, -15.1950718685832, -20.4007285974499, 
-5.13089005235603, -3.37394564198689, -1.94174757281553, 3.94600207684319, 
-8.44564240790655, -7.68518518518518, 6.2227074235808, -11.175898931001, 
-2.87474332648872, 6.29921259842521, 1.95071868583161, -6.46630236794171, 
9.42408376963351, -0.749765698219307, 6.25674217907228, 15.3686396677051, 
-2.60557053009882, 3.42592592592592, 16.2663755458515, -6.99708454810496, 
1.5400410677618, 9.25196850393701, -1.74537987679672, -0.637522768670318, 
11.0994764397906, -2.43673851921276, 8.62998921251348, -6.66058394160584, 
-5.89410589410588, 0.595829195630571, -11.8181818181818, -18.3970856102004, 
-4.42211055276382, -4.65753424657533, -6.06653620352251, 1.24879923150818, 
-9.30434782608696, -3.59168241965974, 3.06122448979591, -16.514598540146, 
-5.79420579420579, 5.56107249255213, -0.707070707070712, -7.01275045537341, 
7.33668341708542, -2.46575342465754, 0.684931506849318, 9.12584053794427, 
-5.39130434782609, 7.65595463137998, 9.89795918367347, -9.85401459854014, 
-3.4965034965035, 6.05759682224429, -0.202020202020203, -0.637522768670318, 
10.5527638190955, -4.5662100456621, 5.7729941291585)), row.names = c(NA, 
-64L), class = c("tbl_df", "tbl", "data.frame"))

当前代码

plot1 <- ggplot(alimentacio, aes(x=Mes1_Any, y=Alimentació, color= Territori, group=Territori))+
  geom_line()
解决方案

要实现X轴按Variac_2019时序排序且显示Mes1_Any标签,关键是将Mes1_Any转换为有序因子,指定其层级顺序与Variac_2019的时序一致。

1. 预处理数据,生成有序因子

使用dplyr对数据排序并提取正确的标签顺序,再将Mes1_Any转换为有序因子:

library(dplyr)
library(ggplot2)

# 按Variac_2019排序,提取唯一的Mes1_Any顺序
ordered_mes <- alimentacio %>%
  arrange(Variac_2019) %>%
  pull(Mes1_Any) %>%
  unique()

# 将Mes1_Any转为有序因子,层级为ordered_mes的顺序
alimentacio <- alimentacio %>%
  mutate(Mes1_Any = factor(Mes1_Any, levels = ordered_mes, ordered = TRUE))

2. 绘制调整后的图表

使用处理后的数据集绘制折线图,此时X轴会自动按Variac_2019的时序排列,同时显示Mes1_Any的标签:

plot1 <- ggplot(alimentacio, aes(x=Mes1_Any, y=Alimentació, color=Territori, group=Territori)) +
  geom_line() +
  # 可选:旋转X轴标签,避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

核心原理

  • 有序因子的层级顺序由ordered_mes决定,而ordered_mes是通过按Variac_2019排序后提取的唯一Mes1_Any值,保证了时序的正确性。
  • ggplot默认会按照因子的层级顺序绘制X轴,而非字母顺序,这样就实现了需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:57