r - 如何在 ggplot2 中创建 Marimekko/马赛克图

标签 r ggplot2

当 x 和 y 都是分类变量时,Marimekko/Mosaic 图是一个很好的默认图。使用 ggplot 创建这些的最佳方法是什么?

example

我能找到的唯一引用资料是这个 4yo blog post但这似乎有点过时了。现在有更好或更简单的实现吗? GGally 包有一个函数 ggally_ratio ,但这会产生完全不同的结果:

ggally

最佳答案

我之前自己做过,只使用geom_bar,我把它变成了一个通用函数,所以它应该适用于任何两个因素enter image description here

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/

相关文章:

r - 组合盒 fiddle 图未对齐

r - 当参数是语言对象时,通过 do.call 添加 ggtitle

r - 包 'ggplot2' 不适用于 R 版本 3.5.1

r - 如何使用 summary() 强制数字变量在 r 中读取为分类?

r - 生成一个小集合的所有可能组合

r - 在 Shiny 中使用带有反应式数据集的 dplyr 输入变量时出现问题

r - 在 ggplot2 中使用 Squash_axis 时出现错误 "NAs are not allowed in subscripted assignments",数据集没有 NA 值

r - 如何根据facet_wrap所有方面的值限制x轴长度

r - 忽略 R 中某些值的行求和值

r - which(arr.ind = TRUE) 不适用于 %in%