How do I create a categorical scatterplot in R like boxplots?

前端 未结 2 1859
梦毁少年i
梦毁少年i 2021-02-10 00:07

Does anyone know how to create a scatterplot in R to create plots like these in PRISM\'s graphpad:

\"e

相关标签:
2条回答
  • 2021-02-10 00:34

    If you don't mind using the ggplot2 package, there's an easy way to make similar graphics with geom_boxplot and geom_jitter. Using the mtcars example data:

    library(ggplot2)
    p <- ggplot(mtcars, aes(factor(cyl), mpg)) 
    p + geom_boxplot() + geom_jitter() + theme_bw()
    

    which produces the following graphic:

    enter image description here

    The documentation can be seen here: http://had.co.nz/ggplot2/geom_boxplot.html

    0 讨论(0)
  • 2021-02-10 00:49

    As @smillig mentioned, you can achieve this using ggplot2. The code below reproduces the plot that you are after pretty well - warning it is quite tricky. First load the ggplot2 package and generate some data:

    library(ggplot2)
    dd = data.frame(values=runif(21), type = c("Control", "Treated", "Treated + A"))
    

    Next change the default theme:

    theme_set(theme_bw())
    

    Now we build the plot.

    1. Construct a base object - nothing is plotted:

      g = ggplot(dd, aes(type, values))
      
    2. Add on the points: adjust the default jitter and change glyph according to type:

      g = g + geom_jitter(aes(pch=type), position=position_jitter(width=0.1))
      
    3. Add on the "box": calculate where the box ends. In this case, I've chosen the average value. If you don't want the box, just omit this step.

      g = g + stat_summary(fun.y = function(i) mean(i), 
              geom="bar", fill="white", colour="black")
      
    4. Add on some error bars: calculate the upper/lower bounds and adjust the bar width:

      g  = g + stat_summary(
              fun.ymax=function(i) mean(i) + qt(0.975, length(i))*sd(i)/length(i), 
              fun.ymin=function(i) mean(i) - qt(0.975, length(i)) *sd(i)/length(i),
              geom="errorbar", width=0.2)
      
    5. Display the plot

      g
      

    enter image description here

    1. In my R code above I used stat_summary to calculate the values needed on the fly. You could also create separate data frames and use geom_errorbar and geom_bar.
    2. To use base R, have a look at my answer to this question.
    0 讨论(0)
提交回复
热议问题