有没有办法在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)
你可能会说我很懒,但有几次由于添加了错误条,我不得不更改min
的{{1}}和max
限制。所以我只想说...使用x的中断大小,具有自动缩放限制。
答案 0 :(得分:7)
您可以定义自己的函数以传递给breaks参数。在您的情况下可以使用的示例是
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()