Popular plots for showing the distribution of the data are boxplot and violin plot. Both has their own advantages and disadvantages. Combination of both can have more power. In a plot, we want to show people all the data, not only the summary statistics such as mean and median.
Sometime ago, I came across sina plot.
sinaplot is inspired by the strip chart and the violin plot. By letting the normalized density of points restrict the jitter along the x-axis the plot displays the same contour as a violin plot, but resemble a simple strip chart for small number of data points. In this way the plot conveys information of both the number of data points, the density distribution, outliers and spread in a very simple, comprehensible and condensed format.
I know that ggforce
has a geom_sina()
for the same purpose and want to try it out.
Let’s load the libraries first:
A violin plot:

we can add the mean and standard deviation for a bit more information:

Very nice! How about if I want to see all the points?

How about showing the jittered points instead?

Let’s combine boxplot with violin plot

compare with sina plot

mean, median and std can be overlayed

Instead of using built-in functions mean_sdl
, one can supply a data frame with all the summary statisitcs one wants to overlay in the plot.
Only add median to the sina plot
Ignoring unknown aesthetics: y

add mean and standard deviation
Ignoring unknown aesthetics: y

You can decide which plot to use for your data. I will argue that they are all better than bar plot with error bars. Showing all the data points (distribution of the data points can be judged) with summary statistics is preferred.
LS0tCnRpdGxlOiAiYm94cGxvdCwgdmlvbGluIHBsb3QgYW5kIHNpbmEgcGxvdCBpbiBnZ3Bsb3QyIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpQb3B1bGFyIHBsb3RzIGZvciBzaG93aW5nIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGRhdGEgYXJlIGJveHBsb3QgYW5kIHZpb2xpbiBwbG90LiBCb3RoIGhhcyB0aGVpciBvd24KYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcy4gQ29tYmluYXRpb24gb2YgYm90aCBjYW4gaGF2ZSBtb3JlIHBvd2VyLiBJbiBhIHBsb3QsIHdlIHdhbnQgdG8gc2hvdyBwZW9wbGUgYWxsIHRoZSBkYXRhLCBub3Qgb25seSB0aGUgc3VtbWFyeSBzdGF0aXN0aWNzIHN1Y2ggYXMgbWVhbiBhbmQgbWVkaWFuLiAKClNvbWV0aW1lIGFnbywgSSBjYW1lIGFjcm9zcyBbc2luYSBwbG90XShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvc2luYXBsb3QvdmlnbmV0dGVzL1NpbmFQbG90Lmh0bWwpLgoKPnNpbmFwbG90IGlzIGluc3BpcmVkIGJ5IHRoZSBzdHJpcCBjaGFydCBhbmQgdGhlIHZpb2xpbiBwbG90LiBCeSBsZXR0aW5nIHRoZSBub3JtYWxpemVkIGRlbnNpdHkgb2YgcG9pbnRzIHJlc3RyaWN0IHRoZSBqaXR0ZXIgYWxvbmcgdGhlIHgtYXhpcyB0aGUgcGxvdCBkaXNwbGF5cyB0aGUgc2FtZSBjb250b3VyIGFzIGEgdmlvbGluIHBsb3QsIGJ1dCByZXNlbWJsZSBhIHNpbXBsZSBzdHJpcCBjaGFydCBmb3Igc21hbGwgbnVtYmVyIG9mIGRhdGEgcG9pbnRzLiBJbiB0aGlzIHdheSB0aGUgcGxvdCBjb252ZXlzIGluZm9ybWF0aW9uIG9mIGJvdGggdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cywgdGhlIGRlbnNpdHkgZGlzdHJpYnV0aW9uLCBvdXRsaWVycyBhbmQgc3ByZWFkIGluIGEgdmVyeSBzaW1wbGUsIGNvbXByZWhlbnNpYmxlIGFuZCBjb25kZW5zZWQgZm9ybWF0LgoKSSBrbm93IHRoYXQgW2BnZ2ZvcmNlYF0oaHR0cHM6Ly9naXRodWIuY29tL3Rob21hc3A4NS9nZ2ZvcmNlKSBoYXMgYSBgZ2VvbV9zaW5hKClgIGZvciB0aGUgc2FtZSBwdXJwb3NlIGFuZCB3YW50IHRvIHRyeSBpdCBvdXQuCgoKYGBge3IgZ2xvYmFsX29wdGlvbnN9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGg9MywgZmlnLmhlaWdodD0xLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFKQpgYGAKCkxldCdzIGxvYWQgdGhlIGxpYnJhcmllcyBmaXJzdDoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGdnZm9yY2UpCmxpYnJhcnkoZ2dwbG90MikKaGVhZChpcmlzKQpgYGAKCgpBIHZpb2xpbiBwbG90OgpgYGB7ciwgZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9MS41fQpwPC0gZ2dwbG90KGlyaXMsIGFlcyh4PVNwZWNpZXMsIHk9U2VwYWwuTGVuZ3RoKSkgKyBnZW9tX3Zpb2xpbihhZXMoZmlsbD1TcGVjaWVzKSkgCnAKYGBgCgp3ZSBjYW4gYWRkIHRoZSBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIGEgYml0IG1vcmUgaW5mb3JtYXRpb246CgpgYGB7ciwgZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9MS41fQpwICsgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhPW1lYW5fc2RsLCBmdW4uYXJncyA9IGxpc3QobXVsdD0xKSwgCiAgICAgICAgICAgICAgICAgZ2VvbT0icG9pbnRyYW5nZSIsIGNvbG9yPSJyZWQiKQpgYGAKClZlcnkgbmljZSEgSG93IGFib3V0IGlmIEkgd2FudCB0byBzZWUgYWxsIHRoZSBwb2ludHM/CgpgYGB7ciwgZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9MS41fQojIHZpb2xpbiBwbG90IHdpdGggZG90IHBsb3QKcCArIGdlb21fZG90cGxvdChiaW5heGlzPSd5Jywgc3RhY2tkaXI9J2NlbnRlcicsIGRvdHNpemU9MC41KQpgYGAKCkhvdyBhYm91dCBzaG93aW5nIHRoZSBqaXR0ZXJlZCBwb2ludHMgaW5zdGVhZD8KCmBgYHtyLCBmaWcud2lkdGg9MywgZmlnLmhlaWdodD0xLjV9CiMgdmlvbGluIHBsb3Qgd2l0aCBqaXR0ZXJlZCBwb2ludHMKIyAwLjIgOiBkZWdyZWUgb2Ygaml0dGVyIGluIHggZGlyZWN0aW9uCnAgKyBnZW9tX2ppdHRlcihzaGFwZT0xNiwgcG9zaXRpb249cG9zaXRpb25faml0dGVyKDAuMikpCmBgYAoKTGV0J3MgY29tYmluZSBib3hwbG90IHdpdGggdmlvbGluIHBsb3QKCmBgYHtyLCBmaWcud2lkdGg9MywgZmlnLmhlaWdodD0xLjV9CiMgdmlvbGluIHBsb3Qgd2l0aCBib3hwbG90CnAgKyAgZ2VvbV9ib3hwbG90KHdpZHRoID0gMC4yKSArIGdlb21faml0dGVyKHNoYXBlPTE2LCBwb3NpdGlvbj1wb3NpdGlvbl9qaXR0ZXIoMC4yKSkKYGBgCgpjb21wYXJlIHdpdGggc2luYSBwbG90CgpgYGB7ciwgZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9MS41fQojIyBzaW5hIHBsb3QKZ2dwbG90KGlyaXMsIGFlcyh4PVNwZWNpZXMsIHk9U2VwYWwuTGVuZ3RoKSkgKyBnZW9tX3NpbmEoYWVzKGNvbG9yPVNwZWNpZXMpKQoKYGBgCgptZWFuLCBtZWRpYW4gYW5kIHN0ZCBjYW4gYmUgb3ZlcmxheWVkIAoKYGBge3IsIGZpZy53aWR0aD0zLCBmaWcuaGVpZ2h0PTEuNX0KZ2dwbG90KGlyaXMsIGFlcyh4PVNwZWNpZXMsIHk9U2VwYWwuTGVuZ3RoKSkgKyBnZW9tX3NpbmEoYWVzKGNvbG9yPVNwZWNpZXMpKSArIAogICAgICAgIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX3NkbCwgZnVuLmFyZ3MgPSBsaXN0KG11bHQ9MSksIGdlb209ImVycm9yYmFyIiwgY29sb3I9InJlZCIsIHdpZHRoPTAuMikgKwogICAgICAgIHN0YXRfc3VtbWFyeShmdW4ueT1tZWFuLCBnZW9tPSJwb2ludCIsIGNvbG9yPSJyZWQiKSArIAogICAgICAgIGdndGl0bGUoInNpbmEgd2l0aCBtZWFuICstIHN0YW5kYXJkIGRldmlhdGlvbiIpCmBgYAoKSW5zdGVhZCBvZiB1c2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYG1lYW5fc2RsYCwgb25lIGNhbiBzdXBwbHkgYSBkYXRhIGZyYW1lIHdpdGggYWxsIHRoZSBzdW1tYXJ5IHN0YXRpc2l0Y3Mgb25lIHdhbnRzIHRvIG92ZXJsYXkgaW4gdGhlIHBsb3QuCgpgYGB7cn0KbGlicmFyeShkcGx5cikKCmlyaXNTdW1tYXJ5IDwtIGlyaXMgJT4lCiAgICAgICAgZ3JvdXBfYnkoU3BlY2llcykgJT4lCiAgICAgICAgc3VtbWFyaXplKFNlcGFsLkxlbmd0aC5tZWFuID0gbWVhbihTZXBhbC5MZW5ndGgpLAogICAgICAgICAgICAgICAgICBTZXBhbC5MZW5ndGguc2QgPSBzZChTZXBhbC5MZW5ndGgpLAogICAgICAgICAgICAgICAgICBTZXBhbC5MZW5ndGgubWVkaWFuID0gbWVkaWFuKFNlcGFsLkxlbmd0aCkpCmlyaXNTdW1tYXJ5CmBgYAoKT25seSBhZGQgbWVkaWFuIHRvIHRoZSBzaW5hIHBsb3QKCmBgYHtyLCBmaWcud2lkdGg9MywgZmlnLmhlaWdodD0xLjV9CmdncGxvdChpcmlzLCBhZXMoeD1TcGVjaWVzLCB5PVNlcGFsLkxlbmd0aCkpICsgCiAgICAgICAgZ2VvbV9zaW5hKGFlcyhjb2xvcj1TcGVjaWVzKSkgKyAKICAgICAgICBnZW9tX2Vycm9yYmFyKGFlcyh5ID0gU2VwYWwuTGVuZ3RoLm1lZGlhbiwgeW1pbiA9IFNlcGFsLkxlbmd0aC5tZWRpYW4sIHltYXg9IFNlcGFsLkxlbmd0aC5tZWRpYW4pLCAKICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpcmlzU3VtbWFyeSwgd2lkdGggPSAwLjIpICsgCiAgICAgICAgZ2d0aXRsZSgic2luYSB3aXRoIG1lZGl1bSIpCmBgYAoKYWRkIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbgpgYGB7ciwgZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9MS41fQpnZ3Bsb3QoaXJpcywgYWVzKHg9U3BlY2llcywgeT1TZXBhbC5MZW5ndGgpKSArIAogICAgICAgIGdlb21fc2luYShhZXMoY29sb3I9U3BlY2llcykpICsgCiAgICAgICAgZ2VvbV9wb2ludChhZXMoeSA9IFNlcGFsLkxlbmd0aC5tZWFuICksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDIsIGRhdGEgPSBpcmlzU3VtbWFyeSkgKyAKICAgICAgICBnZW9tX2Vycm9yYmFyKGFlcyh5ID0gU2VwYWwuTGVuZ3RoLm1lYW4sIHltaW4gPSBTZXBhbC5MZW5ndGgubWVhbiAtIFNlcGFsLkxlbmd0aC5zZCAsIHltYXg9IFNlcGFsLkxlbmd0aC5tZWFuICsgU2VwYWwuTGVuZ3RoLnNkKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gaXJpc1N1bW1hcnksIHdpZHRoID0gMC4yLCBjb2xvciA9ICJyZWQiKSArCiAgICAgICAgZ2d0aXRsZSgic2luYSB3aXRoIG1lYW4gKy0gc3RhbmRhcmQgZGV2aWF0aW9uIikKYGBgCgpZb3UgY2FuIGRlY2lkZSB3aGljaCBwbG90IHRvIHVzZSBmb3IgeW91ciBkYXRhLiBJIHdpbGwgYXJndWUgdGhhdCB0aGV5IGFyZSBhbGwgYmV0dGVyIHRoYW4gYmFyIHBsb3Qgd2l0aCBlcnJvciBiYXJzLiBTaG93aW5nIGFsbCB0aGUgZGF0YSBwb2ludHMgKGRpc3RyaWJ1dGlvbiBvZiB0aGUgZGF0YSBwb2ludHMgY2FuIGJlIGp1ZGdlZCkgd2l0aCBzdW1tYXJ5IHN0YXRpc3RpY3MgaXMgcHJlZmVycmVkLgoK