bu artık gerekli olmadığını tehlikeyi Koşu, bu soruna bir çözüm bulduk. boxplots
doğrudan matplotlib ile çizim yaparken, kutuların düzenlenmesi width
ve position
anahtar sözcükleriyle kontrol edilebilir. sns.factorplot(kind='box',...)
için positions
anahtar kelime geçirerek, ancak, tek
TypeError: boxplot() got multiple values for keyword argument 'positions'
Bundan kaçınmak için bir tek kutu 'elle' sonra boxplot oluşturuldu genişlikleri ayarlayabilirsiniz alır. Bu biraz sıkıcıdır, çünkü kutular FacedGrid
sns.factorplot
tarafından döndürülen tekil Axes
örneklerinde PatchPatches
olarak depolanır. Rects
numaralı (x,y,width,height)
sözdiziminin yerine, PathPatches
, köşeleri tanımlamak için köşeleri kullanır; bu, kutuları ayarlamak istediğinde biraz daha fazla hesaplama gerektirir. Diğer her şeyden önce, matplotlib.boxplot
tarafından döndürülen PathPatches
,kodu için kodu için ek (yoksayılmış) bir köşe içerir ve en iyi göz ardı edilir. Kutuya ek olarak, medyanı işaret eden yatay çizgi artık çok geniş ve ayarlanması da gerekiyor.
from matplotlib.patches import PathPatch
def adjust_box_widths(g, fac):
"""
Adjust the withs of a seaborn-generated boxplot.
"""
##iterating through Axes instances
for ax in g.axes.flatten():
##iterating through axes artists:
for c in ax.get_children():
##searching for PathPatches
if isinstance(c, PathPatch):
##getting current width of box:
p = c.get_path()
verts = p.vertices
verts_sub = verts[:-1]
xmin = np.min(verts_sub[:,0])
xmax = np.max(verts_sub[:,0])
xmid = 0.5*(xmin+xmax)
xhalf = 0.5*(xmax - xmin)
##setting new width of box
xmin_new = xmid-fac*xhalf
xmax_new = xmid+fac*xhalf
verts_sub[verts_sub[:,0] == xmin,0] = xmin_new
verts_sub[verts_sub[:,0] == xmax,0] = xmax_new
##setting new width of median line
for l in ax.lines:
if np.all(l.get_xdata() == [xmin,xmax]):
l.set_xdata([xmin_new,xmax_new])
adjust_box_widths(g, 0.9)
ile bu işlevini çağırarak şu çıktıyı verir:
Ben OP'ın örnek kod tarafından üretilen çerçevelerin genişlikleri ayarlayan bir işlev tanımlamak Aşağıda (ekstra ithalat dikkat edin) :
( )