用于 ggplot2 的不带科学记数法的 R 标记中的 cut 函数

Posted

技术标签:

【中文标题】用于 ggplot2 的不带科学记数法的 R 标记中的 cut 函数【英文标题】:cut function in R- labeling without scientific notations for use in ggplot2 【发布时间】:2013-03-19 11:03:54 【问题描述】:

我使用 cut 和 classIntervals 对 R 中的数据进行分组,稍后我将使用 ggplot2 进行绘图。因此,按 n=3 进行分位数切割的基本操作如下所示:

library(classInt)

a<-c(1,10,100,1000,100000,1000000)
b<-cut(a, 
breaks=data.frame(
  classIntervals(
    a,n=3,method="quantile")[2])[,1],
include.lowest=T)

b 在哪里:

[1] [1,70]          [1,70]          (70,3.4e+04]    (70,3.4e+04]    (3.4e+04,1e+06] (3.4e+04,1e+06]
Levels: [1,70] (70,3.4e+04] (3.4e+04,1e+06]

所以这个输出的第一行是一个带有我的分组数据的向量,我可以在 ggplot2 中使用它。但是,我希望标签是[1,70] (70,34000] (3400,1000000]

,而不是用科学记数法表示这个向量

我怎样才能做到这一点?如果您有其他方法而不是 cut 和 classInt 来获得相同的结果,我们将不胜感激。

【问题讨论】:

如果有人使用类似的功能对数据进行分组,请随时查看Hmisc 包中的cut2,它实际上比我上面描述的功能更有效。另请参阅:stat.ethz.ch/pipermail/r-help/2007-December/148468.html。在这种情况下使用digits=10 来避免科学记数法。 【参考方案1】:

cut 函数中使用参数dig.lab

a<-c(1,10,100,1000,100000,1000000)
b<-cut(a, 
breaks=data.frame(
  classIntervals(
    a,n=3,method="quantile")[2])[,1],
include.lowest=T,dig.lab=10) ##Number of digits used
b
[1] [1,70]          [1,70]          (70,34000]      (70,34000]     
[5] (34000,1000000] (34000,1000000]
Levels: [1,70] (70,34000] (34000,1000000]

【讨论】:

@Jouni Helske -- 如果数字是 10^-17,你会建议什么? 我的情况与 OP 有点相似。我通过一个使用 cut 的函数运行不同的数量,我偶尔会在标签中看到科学记数法,即使是整数数量也是如此。如果我不想看到科学记数法,无论涉及多少,我只设置dig.lab=50(允许的最大值)是否安全?谢谢! 为什么breaks 的输入包裹在data.frame 中? b&lt;-cut(a, breaks= classIntervals(a,n=3,method="quantile")[[2]], include.lowest=T,dig.lab=10) 可以。

以上是关于用于 ggplot2 的不带科学记数法的 R 标记中的 cut 函数的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化格式化坐标轴的数值:抑制科学计数法suppress Scientific Notation

R语言ggplot2可视化格式化坐标轴的数值:抑制科学计数法suppress Scientific Notation

是否可以用ggplot2在R中以科学计数形式显示绘图geom_text数据标签?

(数据科学学习手札55)利用ggthemr来美化ggplot2图像

R语言可视化包ggplot2包设置轴断点位置实战(Axis Breaks)即自定义X轴和Y轴的数值标记位置

ggplot2 轴:设置间隔、对数刻度和指数而不是科学