首页 > 解决方案 > 将 x 轴从一年中的几天更改为月份

问题描述

我有一张图表,显示了多年来不同年份的趋势: 在此处输入图像描述

问题是 x 轴由向量表示,days<-seq(1:366)但我需要在 x 轴上比较月份。数据框太大,但结构是:

 x    y      group
 1 215.4335  2012
 2 214.1977  2012
 3 212.9618  2012
 4 211.7260  2012
 5 210.4901  2012
 6 209.2543  2012

我的代码是:

ggplot(data_ggp, aes(x, y, col = group)) +            
  geom_line()+
  labs(x = " ", y = " ") +
  scale_color_discrete(name = "Trends")+
  theme_bw() +
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"),
        axis.text.x = element_text(size = 8.5))

如何用月份而不是一年中的日子来表示我的 x 轴?感谢您的帮助!

标签: rggplot2time-series

解决方案


要获取月份名称,您需要Dates 某处。两种选择:将您的数据更改为正确的日期,或者在breaks=andlabels=参数函数中伪造它。我将演示后者。

set.seed(42)
fakedat <- data.frame(x=1:365, y=cumsum(runif(365,0,10)))
head(fakedat)
#   x        y
# 1 1  9.14806
# 2 2 18.51881
# 3 3 21.38021
# 4 4 29.68469
# 5 5 36.10214
# 6 6 41.29310

library(ggplot2)
ggplot(fakedat, aes(x, y)) +
  geom_line()

ggplot,x轴为整数

breakfunc <- function(x) {
  origin <- as.Date("2021-01-01")
  days <- origin + x
  origin <- as.POSIXlt(origin)
  dayseq <- as.POSIXlt(seq(days[1], days[2], by = "day"))
  with(dayseq, yday[mday == 1] + 365*(year[mday == 1] - origin$year ))
}

labelfunc <- function(x) {
  origin <- as.Date("2021-01-01")
  format(origin + x, format = "%b")
}

ggplot(fakedat, aes(x, y)) +
  geom_line() +
  scale_x_continuous(breaks=breakfunc, labels=labelfunc)

带有月份名称的ggplot


推荐阅读