我正在为一些数据生成图表,但是滴答的数量太小,我在阅读时需要更多的精度。
有没有办法增加ggplot2中的轴刻度数?
我知道我可以告诉ggplot使用向量作为轴刻度,但我想要的是增加所有数据的刻度数。换句话说,我希望根据数据计算滴答数。
可能ggplot在内部使用某种算法执行此操作,但我无法找到它是如何做到的,根据我的需要进行更改。
答案 0 :(得分:155)
您可以修改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()
给你这个:
覆盖尺度可以给你这样的东西:
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))
如果您想简单地“缩放”绘图的特定部分,请分别查看xlim()
和ylim()
。也可以找到好的见解here来理解其他论点。
答案 1 :(得分:131)
您可以使用内置的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))
基于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))
您只需插入所需的刻度数。
答案 2 :(得分:60)
您可以为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))
答案 3 :(得分:13)
即将推出的ggplot2
v3.3.0版本将提供一个选项n.breaks
,用于自动为scale_x_continuous
和scale_y_continuous
生成中断
devtools::install_github("tidyverse/ggplot2")
library(ggplot2)
plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
geom_point()
plt +
scale_x_continuous(n.breaks = 5)
plt +
scale_x_continuous(n.breaks = 10) +
scale_y_continuous(n.breaks = 10)
答案 4 :(得分:2)
此外,
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))
适用于分箱或离散缩放的x轴数据(即,不需要舍入)。