Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 增加轴刻度的数量_R_Ggplot2 - Fatal编程技术网

R 增加轴刻度的数量

R 增加轴刻度的数量,r,ggplot2,R,Ggplot2,我正在为一些数据生成绘图,但是刻度的数量太小,我需要更精确的读数 是否有办法增加ggplot2中的轴记号数 我知道我可以告诉ggplot使用向量作为轴刻度,但我想要的是增加所有数据的刻度数。换句话说,我希望从数据中计算记号数 可能ggplot是通过某种算法在内部实现的,但我找不到它是如何实现的,可以根据我的需要进行更改。您可以通过修改缩放x_连续和/或缩放y_连续来覆盖ggplot的默认缩放。例如: library(ggplot2) dat <- data.frame(x = rnorm(

我正在为一些数据生成绘图,但是刻度的数量太小,我需要更精确的读数

是否有办法增加ggplot2中的轴记号数

我知道我可以告诉ggplot使用向量作为轴刻度,但我想要的是增加所有数据的刻度数。换句话说,我希望从数据中计算记号数


可能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)