当 x 和 y 都是分类变量时,Marimekko/Mosaic 图是一个很好的默认图。使用 ggplot 创建这些的最佳方法是什么?
我能找到的唯一引用资料是这个 4yo blog post但这似乎有点过时了。现在有更好或更简单的实现吗? GGally 包有一个函数 ggally_ratio ,但这会产生完全不同的结果:
最佳答案
我之前自己做过,只使用geom_bar
,我把它变成了一个通用函数,所以它应该适用于任何两个因素
。
ggMMplot <- function(var1, var2){
require(ggplot2)
levVar1 <- length(levels(var1))
levVar2 <- length(levels(var2))
jointTable <- prop.table(table(var1, var2))
plotData <- as.data.frame(jointTable)
plotData$marginVar1 <- prop.table(table(var1))
plotData$var2Height <- plotData$Freq / plotData$marginVar1
plotData$var1Center <- c(0, cumsum(plotData$marginVar1)[1:levVar1 -1]) +
plotData$marginVar1 / 2
ggplot(plotData, aes(var1Center, var2Height)) +
geom_bar(stat = "identity", aes(width = marginVar1, fill = var2), col = "Black") +
geom_text(aes(label = as.character(var1), x = var1Center, y = 1.05))
}
ggMMplot(diamonds$cut, diamonds$clarity)
关于r - 如何在 ggplot2 中创建 Marimekko/马赛克图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233365/