R语言 更改轴断点而不定义序列- ggplot

vh0rcniy  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(190)

有没有办法在不定义序列的情况下设置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分段大小。

rseugnpd

rseugnpd1#

您可以定义自己的函数来传递给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()
u3r8eeie

u3r8eeie2#

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

相关问题