How to create a Marimekko/Mosaic plot in ggplot2

后端 未结 7 842
我寻月下人不归
我寻月下人不归 2020-11-27 02:59

The Marimekko/Mosaic plot is a nice default plot when both x and y are categorical variables. What is the best way to create these using ggplot?

7条回答
  •  青春惊慌失措
    2020-11-27 03:19

    I did it myself a time ago, using just geom_bar, I turned it into a general function so it should work on any two factors. 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)
    

提交回复
热议问题