不定义序列如何更改轴断点——ggplot

13

是否有办法在ggplot中设置断点步长,而无需定义一个序列。例如:

x <- 1:10
y <- 1:10

df <- data.frame(x, y)

# Plot with auto scale
ggplot(df, aes(x,y)) + geom_point()

# Plot with breaks defined by sequence
ggplot(df, aes(x,y)) + geom_point() +
  scale_y_continuous(breaks = seq(0,10,1))

# Plot with automatic sequence for breaks
ggplot(df, aes(x,y)) + geom_point() +
  scale_y_continuous(breaks = seq(min(df$y),max(df$y),1))

# Does this exist?
ggplot(df, aes(x,y)) + geom_point() +
  scale_y_continuous(break_step = 1)

你可能会说我很懒,但有几次我不得不更改seqminmax限制,因为加入了误差线。所以我只想说......使用x的断点大小,自动缩放限制。

2个回答

21

您可以定义自己的函数,将其传递给breaks参数。在您的情况下有效的示例可能是:

f <- function(y) seq(floor(min(y)), ceiling(max(y)))

然后。
ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = f)

提供

enter image description here

您可以修改此内容以跳过长时间等待的步骤,例如中断。

f <- function(k) {
        step <- k
        function(y) seq(floor(min(y)), ceiling(max(y)), by = step)       
}

然后。
ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = f(2))

通过这个方法,你可以创建一个带有刻度为2、4、...、10等的y轴。

你甚至可以通过编写自己的比例尺函数来进一步实现此功能。

my_scale <- function(step = 1, ...) scale_y_continuous(breaks = f(step), ...)

只需要像这样调用它

ggplot(df, aes(x,y)) + geom_point() + my_scale()

这对我来说非常重要。 - papelr

4
> # Does this exist?
> ggplot(df, aes(x,y)) + geom_point() +
>   scale_y_continuous(break_step = 1)

如果您正在寻找现成的解决方案,那么您可以使用 scales::breaks_width() 函数,如下所示:
scale_y_continuous(breaks = scales::breaks_width(1))

scales 包还包括方便的函数,可以轻松控制“特殊”刻度中的间隔,例如日期时间,例如 scale_x_datetime(breaks='6 hours')


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