我得到了一些奇怪的结果,试图用ggplot绘制一个非常标准的随机变量的直方图。
RB = rbinom(10000000,100,.3)
qplot(RB)#histogram of the distrib with ggplot2. Assumes 30 buckets by default
dev.new()
hist(RB,breaks=30)#same with regular histogram
dev.new()
qplot(RB,binwidth=1)#if we force binwidth to 1 it seems to work
dev.new()
hist(RB,breaks=range(RB)[2]-range(RB)[1])
第一次调用qplot的结果很奇怪。根据绘制数量,我们预计图表将显示平滑分布。
我使用ggplot2版本1.0.0和R 3.0.2
答案 0 :(得分:5)
默认情况下,ggplot根据提示使用range/30
作为binwidth。在你的情况下,它大约是48/30(取决于种子),大于1,大约是1.5。
现在,你的数据不是连续的,你只得到整数,所以对于任何两个相邻的直方图箱,你会得到不规则性,这是因为第一个bin只包含一个可能的整数,而下一个包含两个,依此类推。因此,您会发现每隔一个箱子的计数大约翻了一倍。
说,您的数据看起来像
1 2 3 4 5 6
5 5 5 5 5 5
如果你从0.5开始计算,你将获得这些垃圾箱:
(0.5, 2] (2, 3.5] (3.5 5] (5, 6.5]
10 5 10 5
这正是你在第一块地块上看到的尖峰。
正如您已经发现的那样,如果binwidth严格为1,这将不会成为问题。
正如@James所指出的,使用以下内容重现ggplot给出的基本图形图片:
hist(RB, breaks=seq(min(RB), max(RB), length.out=30))
它可能看起来有点不同,但尖峰就在那里。