Statsbook

Swarm Plot

Rather than using the ggplot21, it is much easier to make swarm plots using the swarmplot package2. The plot is similar to a strip plot with jitter, but the graphical presentation is more elegant.

For this example, download and open the strip.rda dataset and open it in R. The data set contains the maximum flexion in 20 patients before and after a manipulation under anaesthesia. The data can be shown by:

strip
   Flexion  MUA
1       94  Pre
2       95  Pre
.....
.....
39     113 Post
40      86 Post

To create a swarm plot:

library(beeswarm)
beeswarm(Flexion ~ MUA, data = strip, col = 3:2, pch = 16 )

For further option, please refer to the package manual3 manual.

  1. ↑ « ggplot. had.co.nz » (read on 2010-09-19)
  2. ↑ Eklund, « beeswarm: The Bee Swarm Plot, an Alternative to Stripchart », 2016-04-25
  3. ↑ 2J55DA3N[/ZREF”].</P> <P CLASS="WP-BLOCK-PARAGRAPH">A SWARM PLOT CAN ALSO BE COMBINED WITH A <A HREF="HTTPS://PCOOL.DYNDNS.ORG/INDEX.PHP/BOX-PLOT/" DATA-TYPE="PAGE" DATA-ID="501">BOX PLOT</A>:</P> <PRE CLASS="WP-BLOCK-CODE HAS-SMALL-FONT-SIZE"><CODE><EM><SPAN STYLE="COLOR: #FF0000;">BOXPLOT(FLEXION ~ MUA, DATA = STRIP)</SPAN></EM> <EM><SPAN STYLE="COLOR: #FF0000;">BEESWARM(FLEXION ~ MUA, DATA = STRIP, COL = 3:2, PCH = 16, METHOD = 'CENTER'<EM><SPAN STYLE="COLOR: #FF0000;">, ADD = TRUE</SPAN></EM> )</SPAN></EM> </CODE></PRE> <FIGURE CLASS="WP-BLOCK-IMAGE SIZE-LARGE"><IMG SRC="HTTPS://PCOOL.DYNDNS.ORG/WP-CONTENT/UPLOADS/2025/06/SWARM2-1024X1024.PNG" ALT="" CLASS="WP-IMAGE-3797"/></FIGURE> <P CLASS="IS-STYLE-TEXT-ANNOTATION HAS-SMALL-FONT-SIZE IS-STYLE-TEXT-ANNOTATION–3 WP-BLOCK-PARAGRAPH">THE BOXPLOT CALL SHOULD BE FIRST, SO THE SWARM PLOT IS PLACED ON TOP OF THE BOXPLOT.</P> <P CLASS="IS-STYLE-TEXT-ANNOTATION IS-STYLE-TEXT-ANNOTATION–4 WP-BLOCK-PARAGRAPH">THE<A HREF="HTTPS://GITHUB.COM/ECLARKE/GGBEESWARM"> GGBEESWARM PACKAGE</A> HAD BETTER INTEGRATION WITH GGPLOT2 FOR MORE VERSATILE PLOTS.</P> <P CLASS="WP-BLOCK-PARAGRAPH">A SWARM PLOT CAN ALSO BE USED TO VISUALISE <A HREF="HTTPS://PCOOL.DYNDNS.ORG/INDEX.PHP/SURVIVAL-PLOT/" DATA-TYPE="PAGE" DATA-ID="513">SURVIVAL</A> DATA AS DESCRIBED IN THE <A HREF="HTTPS://PCOOL.DYNDNS.ORG/INDEX.PHP/SURVIVAL-ANALYSIS/" DATA-TYPE="PAGE" DATA-ID="516">SURVIVAL CHAPTER</A>.</P> <P CLASS="WP-BLOCK-PARAGRAPH">DOWNLOAD THE <A HREF="HTTPS://PCOOL.DYNDNS.ORG:/WP-CONTENT/DATA_FILES/PLOTSURVIVAL.RDA" TARGET="_BLANK" REL="NOREFERRER NOOPENER">PLOTSURVIVAL.RDA</A> DATASET FOR THIS EXAMPLE. THE DATA FRAME IS CALLED PLOTSURVIVAL AND THE VARIABLES ARE: NUMBER (PATIENT NUMBER), FU (CONTINUOUS; FOLLOW UP TIME), GROUP (CATEGORICAL DATA; HIP 1 OR HIP 2) AND CENSOR (BINARY OUTCOME VARIABLE). TO SHOW THE DATA:</P> <PRE CLASS="WP-BLOCK-CODE HAS-SMALL-FONT-SIZE"><CODE><EM><MARK STYLE="BACKGROUND-COLOR:RGBA(0, 0, 0, 0);COLOR:#F10303" CLASS="HAS-INLINE-COLOR">PLOTSURVIVAL </MARK><MARK STYLE="BACKGROUND-COLOR:RGBA(0, 0, 0, 0);COLOR:#3102F2" CLASS="HAS-INLINE-COLOR"> NUMBER FU GROUP CENSOR 1 1 5.2 HIP 1 0 2 2 6.3 HIP 1 0 3 3 7.0 HIP 1 0 4 4 8.5 HIP 1 0 5 5 9.4 HIP 1 0 6 6 10.1 HIP 1 0 7 7 11.2 HIP 1 0 8 8 12.0 HIP 1 0 9 9 12.5 HIP 1 1 10 10 12.7 HIP 1 0 11 11 4.5 HIP 2 1 12 12 5.8 HIP 2 0 13 13 6.9 HIP 2 0 14 14 7.8 HIP 2 1 15 15 8.2 HIP 2 1 16 16 8.9 HIP 2 1 17 17 9.5 HIP 2 1 18 18 10.2 HIP 2 0 19 19 11.5 HIP 2 0 20 20 12.9 HIP 2 0</MARK></EM></CODE></PRE> <P CLASS="WP-BLOCK-PARAGRAPH">TO CREATE A SWARM PLOT OF THE DATA, WITH HIP 1 IN BLACK AND HIP 2 IN RED:</P> <PRE CLASS="WP-BLOCK-CODE HAS-SMALL-FONT-SIZE"><CODE><SPAN STYLE="COLOR: #FF0000;"><EM>LIBRARY(BEESWARM)</EM></SPAN> <SPAN STYLE="COLOR: #FF0000;"><EM>BEESWARM(FU ~ CENSOR, DATA = PLOTSURVIVAL, PCH = 16, PWCOL = GROUP, YLAB = 'FOLLOW-UP TIME (YEARS)', LABELS = C('CENSORED', 'REVISED'))</EM></SPAN> <SPAN STYLE="COLOR: #FF0000;"><EM>LEGEND('TOPRIGHT', LEGEND = LEVELS(PLOTSURVIVAL$GROUP), TITLE = 'HIP', PCH = 16, COL = 1:2)</EM></SPAN></CODE></PRE> <FIGURE CLASS="WP-BLOCK-IMAGE SIZE-LARGE"><IMG SRC="HTTPS://PCOOL.DYNDNS.ORG/WP-CONTENT/UPLOADS/2025/06/SWARMSURV1-1024X1024.PNG" ALT="" CLASS="WP-IMAGE-3802"/></FIGURE> <P CLASS="WP-BLOCK-PARAGRAPH">TO ADD A <A HREF="HTTPS://PCOOL.DYNDNS.ORG/INDEX.PHP/BOX-PLOT/" DATA-TYPE="PAGE" DATA-ID="501">BOX PLOT</A>.</P> <PRE CLASS="WP-BLOCK-CODE HAS-SMALL-FONT-SIZE"><CODE><SPAN STYLE="COLOR: #FF0000;"><EM>LIBRARY(BEESWARM)</EM></SPAN> <SPAN STYLE="COLOR: #FF0000;"><EM>BOXPLOT(FU ~ CENSOR, DATA = PLOTSURVIVAL)</EM></SPAN> <SPAN STYLE="COLOR: #FF0000;"><EM>LEGEND('TOPRIGHT', LEGEND = LEVELS(PLOTSURVIVAL$GROUP), TITLE = 'HIP', PCH = 16, COL = 1:2)</EM></SPAN> <SPAN STYLE="COLOR: #FF0000;"><EM>BEESWARM(FU ~ CENSOR, DATA = PLOTSURVIVAL, PCH = 16, PWCOL = GROUP, YLAB = 'FOLLOW-UP TIME (YEARS)', LABELS = C('CENSORED', 'REVISED')<SPAN STYLE="COLOR: #FF0000;"><EM>, ADD = TRUE</EM></SPAN>)</EM></SPAN></CODE></PRE> <FIGURE CLASS="WP-BLOCK-IMAGE SIZE-LARGE"><IMG SRC="HTTPS://PCOOL.DYNDNS.ORG/WP-CONTENT/UPLOADS/2025/06/SWARMSURV2-1024X1024.PNG" ALT="" CLASS="WP-IMAGE-3807"/></FIGURE> <P CLASS="WP-BLOCK-PARAGRAPH">FOR FURTHER OPTIONS, PLEASE REFER TO THE BEESWARM[ZREF]2J55DA3N