gre*_*er0 8 r histogram ggplot2
我正在尝试使用ggplot2绘制一个变量的直方图.不幸的是,ggplot2的默认binwidth还有一些不足之处:

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

有趣(对我来说),hist()R 的默认功能似乎产生了更好的"分割"箱子:

由于我正在使用ggplot2完成所有其他图形,所以我也想将它用于此图 - 为了保持一致性.如何hist()使用ggplot2 生成与函数相同的bin"分段" ?
我试图hist在终端输入,但我只有
function (x, ...)
UseMethod("hist")
<bytecode: 0x2f44940>
<environment: namespace:graphics>
Run Code Online (Sandbox Code Playgroud)
它没有我的问题的信息.
我使用以下代码在ggplot2中生成直方图:
ggplot(mydata, aes(x=myvariable)) + geom_histogram(color="darkgray",fill="white", binwidth=61378) + scale_x_continuous("My variable") + scale_y_continuous("Subjects",breaks=c(0,2.5,5,7.5,10,12.5),limits=c(0,12.5)) + theme(axis.text=element_text(size=14),axis.title=element_text(size=16,face="bold"))
Run Code Online (Sandbox Code Playgroud)
我应该补充的一点是,查看由此产生的直方图hist(),看起来这些箱子的宽度为50000(例如,从1400000到1600000,正好有两个箱子); 在ggplot2中将binwidth设置为50000 不会产生相同的图形.ggplot2生成的图表具有相同的差距.
MrF*_*ick 12
没有样本数据,总是很难获得可重复的结果,所以我创建了一个样本数据集
set.seed(16)
mydata <- data.frame(myvariable=rnorm(500, 1500000, 10000))
#base histogram
hist(mydata$myvariable)
Run Code Online (Sandbox Code Playgroud)
如您所知,hist()是一个通用函数.如果要查看可以键入的不同实现methods(hist).大部分时间你都会跑步hist.default.因此,如果从该函数借用破解发现逻辑,我们就会想出来
brx <- pretty(range(mydata$myvariable),
n = nclass.Sturges(mydata$myvariable),min.n = 1)
Run Code Online (Sandbox Code Playgroud)
这是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"))
Run Code Online (Sandbox Code Playgroud)
下图显示了两个并排的结果,你可以看到它们非常相似.

此外,那个空的bim可能是由你的y轴限制引起的.如果形状超出了您指定范围的限制scale_y_continuous,它将简单地从图中删除.看起来那个箱子想要高14,但你把它剪成了12.5.