Boxplots for groups?

后端 未结 4 1095
再見小時候
再見小時候 2020-12-30 03:31

I have a dataset (test) as given below:

Type    Met1    Met2    Met3    Met4
TypeA   65  43  97  77
TypeA   46  25  76  77
TypeA   44  23  55  46
TypeA   46          


        
相关标签:
4条回答
  • 2020-12-30 03:50

    You can use the reshape function to make a long column with all the data from Met1, .., Met4 columns. It also creates a column (temp$time) to identify from which column the data came from that you can use it to stratify your box plot (temp$Type*temp$time).

    df <- read.table(text=
    "Type Met1 Met2 Met3 Met4
    TypeA   65  43  97  77
    TypeA   46  25  76  77
    TypeA   44  23  55  46
    TypeA   46  44  55  77
    TypeA   33  22  55  54
    TypeB   66  8   66  47
    TypeB   55  76  66  65
    TypeB   55  77  88  46
    TypeB   36  67  55  44
    TypeB   67  55  76  65",header=TRUE)
    
    temp <- reshape(df, direction='long', varying = 2:5, sep='')
    
    boxplot(temp$Met ~ temp$Type*temp$time, col=c("yellow", "orange"))
    
    0 讨论(0)
  • 2020-12-30 03:54

    A solution with ggplot2.

    First, transform your data frame test to the long format using melt:

    library(reshape2)
    test.m <- melt(test)
    

    Plot the data:

    library(ggplot2)
    ggplot(test.m, aes(x = variable, y = value, fill = Type)) +
      geom_boxplot() +
      scale_fill_manual(values = c("yellow", "orange"))
    

    enter image description here

    0 讨论(0)
  • 2020-12-30 04:03

    As others have said, first you need to melt your data.

    df <- read.table(text="Type    Met1    Met2    Met3    Met4
    TypeA   65  43  97  77
    TypeA   46  25  76  77
    TypeA   44  23  55  46
    TypeA   46  44  55  77
    TypeA   33  22  55  54
    TypeB   66  8   66  47
    TypeB   55  76  66  65
    TypeB   55  77  88  46
    TypeB   36  67  55  44
    TypeB   67  55  76  65",header=TRUE)
    
    library(reshape2)
    df2 <- melt(df)
    
    boxplot(
      formula = value ~ variable,
      data    = df2,
      boxwex  = 0.25,
      at      = 1:4 - 0.2,
      subset  = Type == "TypeA",
      col     = "yellow",
      main    = "blah",
      xlab    = "x",
      ylab    = "y",
      ylim    = c( 0, ceiling( max( df2$value ) ) + 1 ),
      yaxs    = "i" )
    
    
    boxplot(
      formula = value ~ variable,
      data    = df2,
      boxwex  = 0.25,
      at      = 1:4 + 0.2,
      subset  = Type == "TypeB",
      col     = "orange",
      add     = TRUE )
    
    0 讨论(0)
  • 2020-12-30 04:07

    like this,

    test <- structure(list(Type = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
        2L, 2L, 2L), .Label = c("TypeA", "TypeB"), class = "factor"), 
        Met1 = c(65L, 46L, 44L, 46L, 33L, 66L, 55L, 55L, 36L, 67L
        ), Met2 = c(43L, 25L, 23L, 44L, 22L, 8L, 76L, 77L, 67L, 55L
        ), Met3 = c(97L, 76L, 55L, 55L, 55L, 66L, 66L, 88L, 55L, 
        76L), Met4 = c(77L, 77L, 46L, 77L, 54L, 47L, 65L, 46L, 44L, 
        65L)), .Names = c("Type", "Met1", "Met2", "Met3", "Met4"), 
        class = "data.frame", row.names = c(NA, -10L))
    
    
    # install.packages("ggplot2", dependencies = TRUE)
    require(ggplot2)
    require(reshape2)
    df <- melt(test)
    p <- ggplot(df, aes(factor(variable), value)) + geom_boxplot(aes(fill = Type))
    p
    

    enter image description here

    You take a look at the geom_boxplot manual page.

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