【问题标题】:Change axis breaks without defining sequence - ggplot在不定义序列的情况下更改轴中断 - ggplot
【发布时间】:2016-12-26 16:12:24
【问题描述】:

有没有办法在 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 的中断大小,并具有自动比例限制。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以定义自己的函数来传递给中断参数。适用于您的情况的示例是

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

    然后

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

    给了

    您可以修改它以通过中断的步骤,例如

    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))
    

    将创建一个 y 轴,刻度为 2、4、..、10 等。

    您可以通过编写自己的缩放函数来更进一步

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

    就这样称呼它

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

    【讨论】:

    • 这对我来说太棒了
    猜你喜欢
    • 2023-02-20
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多