如何更好地绘制和比较重叠直方图?
机器算法验证
数据可视化
直方图
2022-04-08 06:18:12
2个回答
显示“重叠”直方图的 usua 替代方法是:
- 并排放置栏(但我认为在大多数情况下它在视觉上效果不佳):
- 用一条线连接条的高度(并放下条本身 - 存在绘制直方图轮廓的替代方案,如天际线):
我正在添加用于制作数字的 R 代码:
dataf <- bind_rows(lapply(1:10,
function(x) {
data.frame(grp=x,
value=rnorm(100,
mean=runif(1)))
}))
ggplot(dataf) +
geom_histogram(aes(x=value, fill=factor(grp)),
position="dodge", binwidth=.5)
ggplot(dataf) +
geom_freqpoly(aes(x=value, color=factor(grp)), binwidth=.5)
将直方图绘制在一起可能很好,但是当您有两个以上的直方图或它们重叠的次数越多时,它就会崩溃,这两种情况都适用于您的情况。我建议你从制作一个绘图矩阵开始(只要你没有这么多组,绘图变得不可用)。
同样,具有太多且太不同的对象的情节可能会变得难以解释。您想要比较直方图,并且想要比较核密度图。请注意,绘图矩阵的每个组都有一条主对角线,然后上下三角形是对称的。对于比较两组的上三角中的给定图,下三角中有一个比较相同两组的对应图。因此,我建议您比较上三角图中的直方图和下三角图中的核密度图。
因为可能仍然难以比较子图中的两个重叠直方图,所以我建议您制作背靠背直方图而不是重叠直方图。
把这些建议放在一起,你会得到这样的结果:
这是使用R. 双直方图代码改编自这里。我怀疑代码对于那些还不是很熟悉的人来说是无法解释的R,但是对于那些确实想看它的人来说,它显示在下面:
data(mtcars)
d = mtcars[,c("qsec","cyl")]
ud = unstack(d)
ud = data.frame(four = c(ud[[1]], rep(NA,3)),
six = c(ud[[2]], rep(NA,7)),
eight = ud[[3]] )
upper = function(x, y){
usr = par("usr"); on.exit(par(usr)); par(usr = c(0, 1, 0, 1), new=TRUE)
hx = hist(x, plot=FALSE)
hy = hist(y, plot=FALSE)
lim = ifelse(max(hy$counts)>max(hx$counts), max(hy$counts), max(hx$counts))
hy$counts = - hy$counts
plot(hy, ylim=c(-lim, lim), col="red", xlim=c(14,23), axes=FALSE, main="")
lines(hx, col="blue")
abline(h=0)
}
diag.hist = function(x, ...){
usr = par("usr"); on.exit(par(usr)); par(usr=c(usr[1:2], 0, 1.5), new=TRUE)
hist(x, freq=FALSE, xlim=c(14,23), ylim=c(0,.8), main="", axes=FALSE)
lines(density(na.omit(x)))
}
lower = function(x, y){
usr = par("usr"); on.exit(par(usr)); par(usr = c(0, 1, 0, 1), new=TRUE)
plot( density(na.omit(x)), xlim=c(14,23),ylim=c(0,.5),main="",axes=FALSE, col="blue")
lines(density(na.omit(y)), col="red")
}
windows()
pairs(ud, upper.panel=upper, diag.panel=diag.hist, lower.panel=lower)
其它你可能感兴趣的问题




