问题描述
很长一段时间以来,我都无法在我的绘图 (ggplot2) 中拉直 x 轴的标签。 挑战在于我有两个 geom_paths,每个都从不同的数据帧中获取数据 - 我相信这会在代码中变得更清晰:
ggplot(data=dx,aes(x = year,y=en.x ))+
scale_y_continuous(breaks = scales::pretty_breaks(n = 2))+
geom_path(data=ps,aes(x,y,color = "Person 1",linetype="Person 1"),size=0.5)+
geom_path(data=pg,color = "Person 2",linetype="Person 2"),size=0.5)+
scale_color_manual("",labels = c(Nutzer1,Nutzer2),values = c("Person 1" = Nutzer1Farbe,"Person 2" = Nutzer2Farbe)) +
scale_linetype_manual("",values=c("Person 1"=Nutzer1Format,"Person 2"=Nutzer2Format))
目标是使用数据框“dx”中的年份标记 X 轴,如 aes 参数所示。它有效!但前提是您禁用了 geom_paths - 如下所示:
ggplot(data=dx,y=en.x ))+
scale_y_continuous(breaks = scales::pretty_breaks(n = 2))+
#geom_path(data=ps,size=0.5)+
#geom_path(data=pg,"Person 2"=Nutzer2Format))
我真的不明白为什么路径会像这样破坏标签 - 它必须是 aes 参数。
如果有人对此有解决方案,我将不胜感激!
解决方法
这可以像这样实现:
- 在调用
xspline
之前将您的原始月份变量转换为日期时间。这样,内插的日期值可以很容易地通过例如转换回日期时间lubridate::as_datetime
。 - 此外,您可以行绑定数据集,这使绘图更容易
library(ggplot2)
library(tidyr)
library(dplyr)
datengesamt <- datengesamt %>%
# Convert to datetime
mutate(month = as.POSIXct(month))
plot(1,1)
ps <- xspline(datengesamt[,1],datengesamt[,2],1,draw=FALSE)
pg <- xspline(datengesamt[,3],draw=FALSE)
pp <- list("Person 1" = data.frame(ps),"Person 2" = data.frame(pg)) %>%
bind_rows(.id = "id") %>%
mutate(x = lubridate::as_datetime(x))
ggplot(pp,aes(x,y,color = id,linetype = id)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 2)) +
geom_path(size=0.5) +
scale_x_datetime(date_labels = "%Y")