Having run the danger that it is no longer needed, I found a solution to this problem. When drawing boxplots directly with matplotlib, the location of the boxes can be controlled using the width and position keywords. However, passing the positions keyword to sns.factorplot(kind='box',...) you get
TypeError: boxplot() got multiple values for keyword argument 'positions'
To get around this, you can set the field width "manually" after creating a boxplot. This is a bit tedious because the boxes are stored as PatchPatches in separate instances of the Axes FacedGrid that are returned by sns.factorplot . Instead of the simple syntax (x,y,width,height) that Rects has, PathPatches use vertices to define angles, which requires a bit more computation when you need to adjust the margins. Above all else, the PathPatches returned by matplotlib.boxplot contains an additional (ignored) vertex for the Path.CLOSEPOLY code, which is set to (0,0) and is best ignored. In addition to the box, the horizontal line that marks the median is now too wide and needs to be adjusted.
Below I define a function that adjusts the width of the fields created by the OP example code (note the additional import):
from matplotlib.patches import PathPatch def adjust_box_widths(g, fac): """ Adjust the withs of a seaborn-generated boxplot. """
calling this function with
adjust_box_widths(g, 0.9)
gives the following result:

source share