ggplot2每个主要休息点的小休息时间的整数倍

时间:2016-09-25 20:37:35

标签: r ggplot2

This answer显示了如何指定次要休息时间的位置。在the documentation中,它表示minor_breaks可以是一个函数。然而,这可以作为输入,如我预期的那样,绘图限制不是下面和上面的主要网格线的位置。

制作一个可以让我返回的剧本,比如每个专业的4个未成年人,似乎并不是很简单。这是我想要做的事情,因为我有一个脚本,我想在多个不同的数据集上使用。我事先并不知道这些限制,因此我无法对它们进行硬编码。我当然可以创建一个函数,在绘图之前从数据集中获取所需的值,但这似乎有点过分。

是否有一般方法说明每次重大突破的次要休息次数?

3 个答案:

答案 0 :(得分:3)

你可以从情节中提取主要内容,并从那里计算你想要的未成年人并为你的情节设置它。

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

答案 1 :(得分:1)

我认为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

答案 2 :(得分: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),因此下一行会显示错误。