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中同一轴上的不同刻度长度的主要内容,如果未能解决你的问题,请参考以下文章