Is there an equivalent in ggplot to the varwidth option in plot?

后端 未结 2 493
执念已碎
执念已碎 2020-12-19 02:58

I am creating boxplots using ggplot and would like to represent the sample size contributing to each box. In the base plot function there is the varwidth

相关标签:
2条回答
  • 2020-12-19 03:22

    The current versions of ggplot2 (V 2.1.0) now contains a varwidth option:

    data <- data.frame(rbind(cbind(rnorm(700, 0,10), rep("1",700)),
                         cbind(rnorm(50, 0,10), rep("2",50))))
    data$X1 <- as.numeric(as.character(data$X1))
    ggplot(data = data, aes(x = X2, y = X1)) + 
        geom_boxplot(varwidth = TRUE) 
    

    0 讨论(0)
  • 2020-12-19 03:26

    Not elegant but you can do that by:

    data <- data.frame(rbind(cbind(rnorm(700, 0,10), rep("1",700)),
                             cbind(rnorm(50, 0,10), rep("2",50))))
    data[ ,1] <- as.numeric(as.character(data[,1]))
    w <- sqrt(table(data$X2)/nrow(data))
    ggplot(NULL, aes(factor(X2), X1)) + 
      geom_boxplot(width = w[1], data = subset(data, X2 == 1)) +
      geom_boxplot(width = w[2], data = subset(data, X2 == 2))
    

    enter image description here

    If you have several levels for X2, then you can do without hardcoding all levels:

    ggplot(NULL, aes(factor(X2), X1)) + 
      llply(unique(data$X2), function(i) geom_boxplot(width = w[i], data = subset(data, X2 == i)))
    

    Also you can post a feature request: https://github.com/hadley/ggplot2/issues

    0 讨论(0)
提交回复
热议问题