Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib: Group boxplots

Is there a way to group boxplots in matplotlib?

Assume we have three groups "A", "B", and "C" and for each we want to create a boxplot for both "apples" and "oranges". If a grouping is not possible directly, we can create all six combinations and place them linearly side by side. What would be to simplest way to visualize the groupings? I'm trying to avoid setting the tick labels to something like "A + apples" since my scenario involves much longer names than "A".

like image 696
bluenote10 Avatar asked May 16 '13 15:05

bluenote10


People also ask

How do you make a boxplot with a group?

In order to create a box plot by group in R you can pass a formula of the form y ~ x , being x a numerical variable and y a categoriacal variable to the boxplot function. You can pass the variables accessing the data from the data frame using the dollar sign or subsetting the data frame.

Are boxplots good for multiple groups?

Compare multiple groupsBox plots are at their best when a comparison in distributions needs to be performed between groups. They are compact in their summarization of data, and it is easy to compare groups through the box and whisker markings' positions.


1 Answers

How about using colors to differentiate between "apples" and "oranges" and spacing to separate "A", "B" and "C"?

Something like this:

from pylab import plot, show, savefig, xlim, figure, \                 hold, ylim, legend, boxplot, setp, axes  # function for setting the colors of the box plots pairs def setBoxColors(bp):     setp(bp['boxes'][0], color='blue')     setp(bp['caps'][0], color='blue')     setp(bp['caps'][1], color='blue')     setp(bp['whiskers'][0], color='blue')     setp(bp['whiskers'][1], color='blue')     setp(bp['fliers'][0], color='blue')     setp(bp['fliers'][1], color='blue')     setp(bp['medians'][0], color='blue')      setp(bp['boxes'][1], color='red')     setp(bp['caps'][2], color='red')     setp(bp['caps'][3], color='red')     setp(bp['whiskers'][2], color='red')     setp(bp['whiskers'][3], color='red')     setp(bp['fliers'][2], color='red')     setp(bp['fliers'][3], color='red')     setp(bp['medians'][1], color='red')  # Some fake data to plot A= [[1, 2, 5,],  [7, 2]] B = [[5, 7, 2, 2, 5], [7, 2, 5]] C = [[3,2,5,7], [6, 7, 3]]  fig = figure() ax = axes() hold(True)  # first boxplot pair bp = boxplot(A, positions = [1, 2], widths = 0.6) setBoxColors(bp)  # second boxplot pair bp = boxplot(B, positions = [4, 5], widths = 0.6) setBoxColors(bp)  # thrid boxplot pair bp = boxplot(C, positions = [7, 8], widths = 0.6) setBoxColors(bp)  # set axes limits and labels xlim(0,9) ylim(0,9) ax.set_xticklabels(['A', 'B', 'C']) ax.set_xticks([1.5, 4.5, 7.5])  # draw temporary red and blue lines and use them to create a legend hB, = plot([1,1],'b-') hR, = plot([1,1],'r-') legend((hB, hR),('Apples', 'Oranges')) hB.set_visible(False) hR.set_visible(False)  savefig('boxcompare.png') show() 

grouped box plot

like image 177
Molly Avatar answered Sep 24 '22 16:09

Molly