2013-04-30 18 views
7

Rysuję bloxplot pokazany poniżej za pomocą python i matplotlib. Czy jest jakikolwiek sposób zmniejszyć odległość między dwoma przyciskami na osi X?Zmniejszanie odległości między dwoma boxplots

enter image description here

Jest to kod, który używam, aby uzyskać powyższy rysunek:

import matplotlib.pyplot as plt 
from matplotlib import rcParams 
rcParams['ytick.direction'] = 'out' 
rcParams['xtick.direction'] = 'out' 

fig = plt.figure() 
xlabels = ["CG", "EG"] 
ax = fig.add_subplot(111) 
ax.boxplot([values_cg, values_eg]) 
ax.set_xticks(np.arange(len(xlabels))+1) 
ax.set_xticklabels(xlabels, rotation=45, ha='right') 
fig.subplots_adjust(bottom=0.3) 
ylabels = yticks = np.linspace(0, 20, 5) 
ax.set_yticks(yticks) 
ax.set_yticklabels(ylabels) 

ax.tick_params(axis='x', pad=10) 
ax.tick_params(axis='y', pad=10) 

plt.savefig(os.path.join(output_dir, "output.pdf")) 

I to jest przykład bliżej do tego, co chciałabym dostać wizualnie (choć nie przeszkadza jeśli boxplots były nawet nieco bliżej siebie):

enter image description here

Odpowiedz

5

Spróbuj zmienić współczynnik kształtu z wykorzystaniem

ax.set_aspect(1.5) # or some other float 

Większy następnie liczbę, węższy (i wyższy) wykres powinien być:

koło zostanie rozciągnięty tak, że wysokość num razy szerokość. aspect=1 jest taki sam jak aspect=’equal’.

http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect

+0

Wybrałem to jako odpowiedź, ponieważ ustawienie tego aspektu było tym, czego mi brakowało, ale ostatecznie rozwiązanie implikowało również zmianę szerokości pól, zgodnie z odpowiedzią @ tcaswell. –

10

można albo zmienić t proporcje on działki lub użyj widths kwarg (doc) jako takie:

ax.boxplot([values_cg, values_eg], widths=1) 

do skrzynki szerszy.

1

Gdy kod pisze:

ax.set_xticks(np.arange(len(xlabels))+1) 

Stawiasz pierwsze Wykres pudełkowy na 0, a drugi na 1 (zdarzenia choć potem zmienić etykiety zaznaczyć), tak jak w drugim, "pożądanym" przykładzie, który dałeś, są ustawione na 1,2,3. Więc myślę, że alternatywnym rozwiązaniem byłoby grać z pozycją xticks i xlim akcji.

na przykład stosując

ax.set_xlim(-1.5,2.5) 

byłoby umieścić je bliżej.

+1

To było pierwsze podejście, które próbowałem, ale bez powodzenia. Myślę, że powodem jest to, że przestrzeń między kleszczami zawsze jest względna w stosunku do dostępnej przestrzeni. Tak więc, jeśli przesuniemy tyknięcia bliżej punktu początkowego, po prawej stronie pojawi się więcej miejsca, a fabuła będzie "powiększona", aby uzyskać dostępną przestrzeń. Jeśli chodzi o '' xlim() '', pozwala on tylko kontrolować przestrzeń od kleszcza do miejsca pochodzenia, a nie przestrzeń między kleszczami. –

Powiązane problemy