R语言 如何在ggplot2中的轴刻度之间放置轴标签

myss37ts  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(185)

在底数R中,我喜欢在x轴上绘制带有时间的图,标签显示在长刻度线之间。例如,可能在6月1日和6月31日有刻度线,但文本“June”显示在中间,以6月15日为中心。在底数R中,我只画了两个轴,一个带有刻度线,一个带有标签。
然而,我还没能弄清楚如何在ggplot2中制作这种风格的轴。

  • 简单地偏移文本调整是不够精确的。
  • 使用labels = c("","June","")创建一个轴几乎可以工作,但是刻度线只接受一个长度,所以类似axis.ticks.length = unit(c(.25,0,.25),"cm")的东西不起作用。

我认为ggh4x包可能会有类似的功能,但是我还没有弄清楚,我很乐意使用任何与ggplot2兼容的解决方案,不管是哪个包。

erhoui1w

erhoui1w1#

你看过scales包了吗?你可以用breaks_pretty指定你想要的x轴刻度线和标签的数量,并用label_date指定日期格式,而不是手动创建x轴刻度线和标签。

library(tidyverse)
library(scales)
time <- seq(as.Date("2020-1-1"), as.Date("2022-1-1"), by = "months")
var <- c(1:15, 15:6)
df <- data.frame(var, time) %>%
  mutate(time = as.Date(time))

# original
df %>%
  ggplot(aes(x = time, y = var)) +
  geom_bar(stat = "identity")

# just month names
df %>%
  ggplot(aes(x = time, y = var)) +
  geom_bar(stat = "identity") + 
  scale_x_date(labels = label_date("%B"))

# increase tick marks with month names and full year
df %>%
  ggplot(aes(x = time, y = var)) +
  geom_bar(stat = "identity") + 
  scale_x_date(labels = label_date("%B %Y"),
               breaks = breaks_pretty(n = 12)) # <- change 12 to another number

相关问题