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

4

我在SO上看到了两个很好的例子,它们在ggplot2中将两组不同的刻度添加到了同一幅图中,请参见Insert blanks into a vector for, e.g., minor tick labels in Rggplot2 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 轴上有两组不同长度的刻度线):

基础 R 绘图

我不知道在 ggplot2 中该如何实现这个效果。当我尝试传递与 breaks 长度相同的向量到 theme() 中的 axis.ticks.length 参数时,它只取向量的第一个元素进行绘制。


这个问题有帮助吗?https://dev59.com/RGYq5IYBdhLWcg3wbgHk - Peter
@Peter 我认为这与我上面提到的两个例子是相同的。它使用主要和次要刻度来跳过次要断点的标签,但不能添加另一组刻度长度。 - Jun Jiang
请查看 ggh4x 包中的文档,我认为您会发现可以编辑刻度标记的长度。 - Peter
@Peter 谢谢!我想这就是了! - Jun Jiang
1个回答

3

正如Peter所提到的,有一个名为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))

它可以像上面那样使用。这是否符合您的意愿?

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接