R 增加轴刻度的数量
我正在为一些数据生成绘图,但是刻度的数量太小,我需要更精确的读数 是否有办法增加ggplot2中的轴记号数 我知道我可以告诉ggplot使用向量作为轴刻度,但我想要的是增加所有数据的刻度数。换句话说,我希望从数据中计算记号数R 增加轴刻度的数量,r,ggplot2,R,Ggplot2,我正在为一些数据生成绘图,但是刻度的数量太小,我需要更精确的读数 是否有办法增加ggplot2中的轴记号数 我知道我可以告诉ggplot使用向量作为轴刻度,但我想要的是增加所有数据的刻度数。换句话说,我希望从数据中计算记号数 可能ggplot是通过某种算法在内部实现的,但我找不到它是如何实现的,可以根据我的需要进行更改。您可以通过修改缩放x_连续和/或缩放y_连续来覆盖ggplot的默认缩放。例如: library(ggplot2) dat <- data.frame(x = rnorm(
可能ggplot是通过某种算法在内部实现的,但我找不到它是如何实现的,可以根据我的需要进行更改。您可以通过修改
缩放x_连续
和/或缩放y_连续
来覆盖ggplot的默认缩放。例如:
library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x,y)) +
geom_point()
如果只想“放大”绘图的特定部分,请分别查看
xlim()
和ylim()
。还可以找到很好的洞察力来理解其他参数。您可以向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))
库(ggplot2)
dat基于,您还可以使用自动导入的缩放
库中的功能:
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))
另外,
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))
适用于分格或离散缩放x轴数据(即,不需要舍入)。即将发布的ggplot2
版本3.3.0将有一个选项n.breaks
自动为scale\u x\u continuous
和scale\u y\u 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)
实际上,重点是通过
参数将推广到不同的数字刻度,即,对于范围为c(-3,3)的数据,0.5是一个好值,但对于范围为c(05000)的数据,它不是一个好值。有什么函数可以计算它吗?@JoãoDaniel-我的意思是ggplot在这方面做得很好。如果它不能产生一组令人满意的结果,我不确定是否有一个内置函数提供不同的功能。您想要的详细程度将特定于您的绘图,但可能需要考虑一些测试用例和您指定的详细程度来识别模式……如果这是一个箱线图,类似于max-min/30
的内容是一个非常常见的“bucket”大小…但这可能是一个很好的起点,也可能不是。对于时间序列的x轴上的分类值(如一年中的月份)呢?@ScottDavis看一看。您可以使用缩放日期(date_breaks=“5个月”,date_minor_breaks=“1个月”)
进行缩放。应使用笛卡尔坐标,而不是xlim
。无需创建自己的函数number\u 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))
@Daniel Krizian:1)需要需要(scales)
2)这似乎可以防止我的中断出现在科学记数法中,因此,1e6更改为1000000??您可以使用基本R的pretty
,而无需scales
包,只需将值作为参数提供即可。例如:(breaks=pretty(dat$x,n=10))
@smci如果ggplot2正在工作,则可以使用scales。ggplot2在没有秤的情况下无法工作。这显然是最好的答案!顺便说一句,ggplot已经导入了scales
,但没有将函数添加到您的命名空间中。因此,您可以在不导入的情况下将它们称为scales::pretty\u breaks(n=10)
。我同意-这太棒了!多年来,我一直在使用“不太有用”的解决方案,但它有一些限制(例如,它不能处理分面图中的“自由”比例),但scales::pretty_breaks
可以完美地处理这些问题!我不敢相信我花了这么长时间才找到它。假设您使用的是支持它的ggplot版本,下面描述的n.breaks
参数提供了相同的功能,但非常紧凑。两个答案都很好!这显然是最好的答案!假设您有提供此参数的最新版本的ggplot,那么它与使用scales::pretty_breaks
一样有效,但更紧凑、更清晰。谢谢这个新特性很有用,但我希望我们可以指定中断增量,而不必指定最小值和最大值。因此,我希望指定类似于break=seq(1:10,1)
或n.breaks=10
(假设最小值为1,最大值为10)的内容。因此,如果有12个数据点,则会有12个记号/标签ggplot
已经有了数据,所以它似乎可以计算出最小/最大值。
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)