您可以通过修改 scale_x_continuous
和/或 scale_y_continuous
来覆盖 ggplots 默认比例。例如:
library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x,y)) +
geom_point()
给你这个:
https://i.stack.imgur.com/d5jFT.jpg
覆盖尺度可以给你这样的东西:
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))
https://i.stack.imgur.com/brQ5z.jpg
如果您想简单地“放大”绘图的特定部分,请分别查看 xlim()
和 ylim()
。还可以找到很好的洞察力here来理解其他论点。
基于 Daniel Krizian's comment,您还可以使用自动导入的 scales
库中的 pretty_breaks
函数:
ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))
您所要做的就是为 n
插入所需的刻度数。
一个不太有用的解决方案(因为您必须再次指定数据变量),您可以使用内置的 pretty
函数:
ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))
scales
但没有将函数添加到您的命名空间。因此,您可以在没有导入为 scales::pretty_breaks(n = 10)
的情况下调用它们。
scales::pretty_breaks
完美地处理了这些!我无法相信我花了这么长时间才找到它。
n.breaks
参数的 Tung's answer 提供了相同的功能,但非常紧凑。两个很好的答案!
您可以为 scale
提供一个函数参数,ggplot 将使用该函数来计算刻度位置。
library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks=number_ticks(10)) +
scale_y_continuous(breaks=number_ticks(10))
number_ticks
。这已在 pretty_breaks {scales}
中实现。因此:ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
require(scales)
2)这似乎可以防止我的中断出现在科学记数法中,因此 1e6 更改为 1000000 ??
scales
包的情况下使用基本 R 的 pretty
,只需提供值作为参数。例如:(breaks=pretty(dat$x, n=10))
从 v3.3.0 开始,ggplot2
有一个选项 n.breaks
可以自动为 scale_x_continuous
和 scale_y_continuous
生成中断
library(ggplot2)
plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
geom_point()
plt +
scale_x_continuous(n.breaks = 5)
https://i.stack.imgur.com/RUxXg.png
plt +
scale_x_continuous(n.breaks = 10) +
scale_y_continuous(n.breaks = 10)
https://i.stack.imgur.com/pyTrw.png
scales::pretty_breaks
一样有效,但更紧凑和清晰。谢谢!
break.increments = 1
之类的东西,而不是 breaks = seq(1:10, 1)
或 n.breaks = 10
之类的东西(假设我的最小值为 1,最大值为 10)。因此,如果有 12 个数据点,就会有 12 个刻度/标签。 ggplot
已经有了数据,所以它似乎可以计算出最小值/最大值。
此外,
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))
适用于分箱或离散缩放的 x 轴数据(即,不需要舍入)。
对此问题的答复和How set labels on the X and Y axises by equal intervals in R ggplot?
mtcars %>%
ggplot(aes(mpg, disp)) +
geom_point() +
geom_smooth() +
scale_y_continuous(limits = c(0, 500),
breaks = seq(0,500,50)) +
scale_x_continuous(limits = c(0,40),
breaks = seq(0,40,5))
by
参数“概括”到不同的数字尺度,即 0.5 是这个范围为 c(-3,3) 的数据的好值,但它不是一个好的范围范围为 c(0,5000) 的数据。有没有计算它的函数?max-min/30
之类的东西很常见“桶”大小......但这对您来说可能是也可能不是一个好的起点。scale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
coord_cartesian
而不是xlim
。 stackoverflow.com/questions/25685185/…