R-使用ggplot2模拟hist()的默认行为以获得仓位宽度

R-使用ggplot2模拟hist()的默认行为以获得仓位宽度,r,histogram,ggplot2,R,Histogram,Ggplot2,我试图用ggplot2绘制一个变量的直方图。不幸的是,ggplot2的默认binwidth留下了一些需要改进的地方: 我试着玩binwidth,但我无法摆脱那个丑陋的“空”垃圾箱: 有趣的是(对我来说),R的默认hist()函数似乎能更好地“分割”垃圾箱: 由于我正在使用ggplot2绘制所有其他图形,因此我也希望将其用于此图形,以保持一致性。如何使用ggplot2生成与hist()函数相同的bin“segmentation” 我试图在终端输入hist,但只得到了 function (x,

我试图用ggplot2绘制一个变量的直方图。不幸的是,ggplot2的默认binwidth留下了一些需要改进的地方:

我试着玩
binwidth
,但我无法摆脱那个丑陋的“空”垃圾箱:

有趣的是(对我来说),R的默认
hist()
函数似乎能更好地“分割”垃圾箱:

由于我正在使用ggplot2绘制所有其他图形,因此我也希望将其用于此图形,以保持一致性。如何使用ggplot2生成与
hist()
函数相同的bin“segmentation”

我试图在终端输入
hist
,但只得到了

function (x, ...) 
UseMethod("hist")
<bytecode: 0x2f44940>
<environment: namespace:graphics>

我要补充的一点是,查看由
hist()
生成的直方图,这些箱子的宽度似乎为50000(例如,从1400000到1600000,正好有两个箱子);在ggplot2中将binwidth设置为50000不会生成相同的图形。ggplot2生成的图形具有相同的间隙

没有样本数据,总是很难得到可重复的结果,所以我创建了一个样本数据集

set.seed(16)
mydata <- data.frame(myvariable=rnorm(500, 1500000, 10000))

#base histogram
hist(mydata$myvariable)
这就是默认情况下
hist()
计算中断的方式。然后,我们可以使用
ggplot
命令使用这些中断

ggplot(mydata, aes(x=myvariable)) + 
    geom_histogram(color="darkgray",fill="white", breaks=brx) + 
    scale_x_continuous("My variable") + 
    theme(axis.text=element_text(size=14),axis.title=element_text(size=16,face="bold"))
下图显示了这两个结果并排,正如你所看到的,它们非常相似


此外,该空bim可能是由y轴限制引起的。如果形状超出了您在
缩放y连续
中指定的范围限制,它将从绘图中删除。看起来那个箱子想要14米高,但你把y剪成了12.5。

我真希望geom_柱状图的默认行为与本地hist相同。
brx <- pretty(range(mydata$myvariable), 
    n = nclass.Sturges(mydata$myvariable),min.n = 1)
ggplot(mydata, aes(x=myvariable)) + 
    geom_histogram(color="darkgray",fill="white", breaks=brx) + 
    scale_x_continuous("My variable") + 
    theme(axis.text=element_text(size=14),axis.title=element_text(size=16,face="bold"))