gpt4 book ai didi

R-使用ggplot2模拟hist()的默认行为以获取bin宽度

转载 作者:行者123 更新时间:2023-12-04 06:18:49 25 4
gpt4 key购买 nike

我正在尝试使用ggplot2绘制一个变量的直方图。不幸的是,ggplot2的默认binwidth有一些不足之处:

我尝试过使用binwidth,但是我无法摆脱那个丑陋的“空”垃圾箱:

(对我而言)有趣的是,R的默认hist()函数似乎对垃圾箱产生了更好的“分段”:

由于我正在使用ggplot2进行所有其他图形处理,因此我也希望将其用于该图形处理-以便保持一致性。如何使用ggplot2生成hist()函数的相同bin“分段”?

我试图在终端上输入hist,但是我只有

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

没有任何信息可以解决我的问题。

我正在使用以下代码在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"))

我应该添加的一件事是,查看 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()是一个通用函数。如果要查看不同的实现,可以键入 methods(hist)。大多数情况下,您将运行 hist.default。因此,如果借用该函数的突破口逻辑,我们得出
brx <- pretty(range(mydata$myvariable), 
n = nclass.Sturges(mydata$myvariable),min.n = 1)

默认情况下,这是 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轴限制引起的。如果形状超出了您在 scale_y_continuous中指定的范围的限制,则形状只会从绘图中删除。看起来那个bin想要高14,但是您将y剪下了12.5。

关于R-使用ggplot2模拟hist()的默认行为以获取bin宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com