ggplot:在线条图中标记 x 轴

Posted

技术标签:

【中文标题】ggplot:在线条图中标记 x 轴【英文标题】:ggplot: labeling x axis in lineplot 【发布时间】:2021-09-17 20:00:20 【问题描述】:

很长一段时间以来,我都不希望在我的绘图 (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, aes(x , y, 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("",labels = c(Nutzer1, Nutzer2), values=c("Person 1"=Nutzer1Format, "Person 2"=Nutzer2Format)) 

目标是用数据框“dx”中的年份标记 X 轴,如 aes 参数所示。它有效!但前提是您禁用 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, aes(x , y, 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("",labels = c(Nutzer1, Nutzer2), values=c("Person 1"=Nutzer1Format, "Person 2"=Nutzer2Format))

我真的不明白为什么路径会像这样破坏标签 - 它一定是 aes 参数。

如果有人对此有解决方案,我将非常感激!

【问题讨论】:

不知何故我没能成功运行xspline(datengesamt[,2:2], shape=0.9, lwd=2, draw=F)。无论如何,尝试将您的年份设置为数字或日期格式 【参考方案1】:

这可以这样实现:

    在调用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[,1], datengesamt[,3], 1, 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")

【讨论】:

正是我想要的。完美运行 - 非常感谢。您能否准确解释解决方案中发生了什么,所以我明白您做了什么? :D

以上是关于ggplot:在线条图中标记 x 轴的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化改变图中线条的透明度级别实战

ggplot:显示每个平面图的 x 轴线

ggplot折线图中的多行x轴标签

为线条 ggplot2 分配颜色

ggplot图中每个方面的不同颜色条

R语言ggplot2可视化分组箱图并且在箱图中添加每个分组的均值将每个箱图中的分组均值使用线条连接起来(Add a line connecting Mean Values on Boxplot)