【问题标题】:Plotting a histogram with ggplot2 when the magnitude of data is large数据量大时用ggplot2绘制直方图
【发布时间】:2014-02-21 11:07:07
【问题描述】:

我有以下数据框,df,我希望为其绘制直方图。

     x
1   -28313937
2   -218616099
3   -18406124
4   20307666
5   31985283
6   41429217
7   46488567
8   47690792
9   51127321
10  53168291
11  55247883
12  -49200409
13  33398814
14  36198419
15  42765257
16  45857195
17  43870899
18  50557988
19  49574516
20  52317786
21  50769743

我使用以下代码来绘制直方图,

R_hist <- ggplot(df, aes(x=x)) + 
geom_histogram(binwidth=.5, colour="black", fill="white") + 
geom_vline(aes(xintercept=mean(x, na.rm=T)), color="violet", linetype="dashed", size=1)

当我尝试调用对象 R_hist 时,我得到一个 错误:无法分配大小为 4.1 Gb 的向量 另外:警告信息: 1:在 seq.default(round_any(range[1], size, floor), round_any(range[2], : 已达到 4021Mb 的总分配:请参阅 help(memory.size)

有人可以告诉我为什么直方图没有像这里应该的那样绘制

谢谢。

【问题讨论】:

  • 你能让你的问题重现吗?
  • 您正在尝试为-21861609955247883 之间的每个值以0.5 的增量绘制一个条形图...您想要21 个高度为x 的条形图吗? ... FWIW,这是一个包含 5 亿个值的向量,最终太大而无法分配。
  • @RomanLuštrik 在什么意义上可重现?我尝试为图形对象使用不同的名称,但仍然出现相同的错误
  • @Justin 感谢您的评论。是的,确实我想要 21 条高度以 x 表示的条形
  • 给我们你用来绘图的数据和代码。以下是有关如何做到这一点的一些提示:stackoverflow.com/questions/5963269/…

标签: r ggplot2 histogram


【解决方案1】:

如 cmets 所示,您正在尝试绘制一个直方图,其中包含 df$x 中从最小值到最大值的条形图。

改为使用geom_barstat='identity'

# grab the data provied
df <- read.table('clipboard')

# switch the names cause it'll bug me
df$y <- df$x
df$x <- row.names(df)

# plot using some identifier (row.names in this case)
ggplot(df, aes(x=x, y=y)) + geom_bar(stat='

【讨论】:

  • 感谢您的建议
  • 如何在 ggplot 中为这些数据制作箱线图,不包括负值。 boxplot(df) 绘制整个数据
  • @Amm 我强烈建议您阅读一些 R 指南介绍。具体来说,您想研究子集。但是,在这种情况下,您将使用 boxplot(df[df$x&gt;0,])
  • 感谢您的提示。我会研究子集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2016-04-23
相关资源
最近更新 更多