ggplot2中同一轴上的不同刻度长度

Posted

技术标签:

【中文标题】ggplot2中同一轴上的不同刻度长度【英文标题】:Different tick length on the same axis in ggplot2 【发布时间】:2021-11-05 07:57:21 【问题描述】:

我在 SO 上看到了两个很好的例子,其中两组不同的刻度被添加到 ggplot2 的同一个图中,请参阅 Insert blanks into a vector for, e.g., minor tick labels in R 和 ggplot2 displaying unlabeled tick marks between labeled tick marks。但是,如果我想要两组不同长度的刻度怎么办?在基础 R 中执行此操作相当容易(从参考 2 修改的数据和代码):

library("magrittr")
library("ggplot2")

set.seed(5)
df <- data.frame(x = rnorm(500, mean = 12.5, sd = 3))

breaks <- seq(2.5, 25, .5)

plot(hist(df$x,breaks = breaks), xaxt = "n", col = "gray66")
axis(1, tck = -.02, at = breaks[breaks %% 2.5 == 0], lwd = 2, lwd.ticks = 2)
axis(1, tck = -.01, lwd = 0, at = breaks[breaks %% 2.5 != 0], labels = NA, lwd.ticks = 1)

我得到(注意 X 轴上两组不同长度的刻度):

base R plot

我看不出这是如何在 ggplot2 中完成的,当我尝试传递与 breaks 相同长度的向量时,theme() 中的 axis.ticks.length 争论仅采用向量的第一个元素进行绘图。

【问题讨论】:

这个问题有帮助吗? ***.com/questions/14490071/… @Peter 我认为和我上面提到的两个例子一样。它使用主要和次要刻度来跳过小中断的标签,但它不能添加另一组刻度长度。 查看ggh4x包中的文档我想你会发现你可以编辑刻度线长度。 @Peter 谢谢!我想就是这样! 【参考方案1】:

正如彼得提到的那样,有一个 ggh4x 包:

install.packages('ggh4x')
library(ggh4x)

set.seed(5)
df <- data.frame(x = rnorm(500, mean = 12.5, sd = 3))


    ggplot(df,aes(x=x) )+
      geom_histogram()+
      scale_x_continuous(
        minor_breaks = seq(0, 20, by = 1),
        breaks = seq(0, 20, by = 5), limits = c(0, 20),
        guide = "axis_minor" # this is added to the original code
      )+
      theme(ggh4x.axis.ticks.length.minor = rel(0.5))

可以像上面那样使用。这是你愿意的吗?

【讨论】:

以上是关于ggplot2中同一轴上的不同刻度长度的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2用于带有两个相同刻度标签的条形图

用ggplot2绘制密度,x轴上没有线

增加y轴刻度标签ggplot2上的间距

ggplot2 Markdown 在主题元素中。组合两列以制作一个具有不同字体的刻度标签

ggplot2 x轴,每个值R的标签

ggplot2:在离散轴上显示每第 n 个值