r - 将 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 轴?感谢您的帮助!
解决方案
要获取月份名称,您需要Date
s 某处。两种选择:将您的数据更改为正确的日期,或者在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()
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)
推荐阅读
- php - 在多维数组的同一级别中计数值
- ios - 从核心数据中检索 UUID 并设置 UUID 变量不起作用
- firebase-realtime-database - 将收到的消息从 Twilio 发送到 Firebase 实时数据库
- jquery - 如何更改 iCheck 复选框的边框颜色以匹配其周围颜色?
- reactjs - 如何使用 react-widgets/lib/DateTimePicker
- javascript - 从最后一个位置开始每隔 n 个位置拆分编号
- c++ - 如何控制 DLL 的搜索顺序以避免劫持?
- php - 如何使用 codeignitor 从电子邮件中删除特殊字符
- laravel - 在 Laravel 中找不到类“App\Models\AdListing”
- python - 将扫描的 PDF 或 tessaract 可搜索的 PDF 转换为 docx/doc 并使用 python 维护所有格式和布局