ggplot2整数倍的小刻度线与大刻度线之间的数量问题

4
这个答案展示了如何指定次要断点的位置。在文档中,它说minor_breaks可以是一个函数。然而,它所需的输入是绘图限制而不是我预期的主要网格线下方和上方的位置。

似乎很难编写一个脚本来返回比例为4:1的次要断点。这是我想做的事情,因为我有一个脚本,想在多个不同的数据集上使用。我事先不知道限制,所以不能硬编码它们。当然,我可以创建一个函数,在绘图之前从数据集中获取所需的值,但这似乎有些过度。

是否有一种通用的方法来说明每个主要断点的次要断点数量?

3个回答

6
你可以从图表中提取主要内容,然后计算你想要的次要内容并为你的图表设置它。
df <- data.frame(x = 0:10,
                 y = 0:10)
p <- ggplot(df, aes(x,y)) + geom_point()

majors <- ggplot_build(p)$panel$ranges[[1]]$x.major_source
multiplier <- 4
minors <- seq(from = min(majors),
              to = max(majors),
              length.out = ((length(majors) - 1) * multiplier) + 1)
p + scale_x_continuous(minor_breaks = minors)

enter image description here


在当前版本的ggplot中(2019年3月),请使用majors <- ggplot_build(p)$layout$panel_params[[1]]$x.major_source - Tony Ladson
在ggplot 3.3.3中使用majors <- ggplot_build(p)$layout$panel_params[[1]]$x$breaks - Tony Ladson

2

我认为scales::extended_breaks是连续比例尺的默认函数。您可以设置此函数中的刻度数量,并使 minor_breaks 的数量成为 breaks 的整数倍。

library(ggplot2)
library(scales)
nminor <- 7
nmajor <- 5
ggplot(iris, aes(x = Species, y = Sepal.Length)) + 
  geom_point() +
  scale_y_continuous(breaks = extended_breaks(n = nmajor), minor_breaks = extended_breaks(n = nmajor * nminor) )

Image of the example


0
使用ggplot2版本3,我必须稍微修改Eric Watt上面的代码才能使其正常工作(由于我还没有50个声望,因此无法对此发表评论)。
library(ggplot2)

df <- data.frame(x = 0:10,
                 y = 10:20)
p <- ggplot(df, aes(x,y)) + geom_point()

majors <- ggplot_build(p)$layout$panel_params[[1]]$x.major_source;majors
multiplier <- 10
minors <- seq(from = min(majors),
              to = max(majors),
              length.out = ((length(majors) - 1) * multiplier) + 1);minors
p + scale_x_continuous(minor_breaks = minors)

如果我在编辑器中复制粘贴相同的代码,它不会创建主键(NULL),因此下一行会出现错误。

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