Unten ist eine Figur, die ich mit Matplotlib erstellt habe. Das Problem ist ziemlich offensichtlich - die Etiketten überschneiden sich und das Ganze ist ein unlesbares Durcheinander.Was kann ich bei den überlappenden Labels in diesen Teilplots tun?
Ich versuchte tight_layout
für jeden subplot Aufruf, aber das ist mein ipython-Notebook-Kernel abstürzt.
Was kann ich tun, um das Layout zu reparieren? Zu den akzeptablen Vorgehensweisen gehören das Fixieren von X-Label, Y-Label und Titel für jedes Subplot, aber ein anderer (und vielleicht besserer) Ansatz wäre, ein einzelnes X-Label, Y-Label und Titel für die gesamte Figur zu haben.
Hier ist die Schleife ich verwendet, um die oben Nebenhandlungen zu generieren:
for i, sub in enumerate(datalist):
subnum = i + start_with
subplot(3, 4, i)
# format data (sub is a PANDAS dataframe)
xdat = sub['x'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]
ydat = sub['y'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]
# plot
hist2d(xdat, ydat, bins=1000)
plot(0, 0, 'ro') # origin
title('Subject {0} in-Trial Gaze'.format(subnum))
xlabel('Horizontal Offset (degrees visual angle)')
ylabel('Vertical Offset (degrees visual angle)')
xlim([-.005, .005])
ylim([-.005, .005])
# tight_layout # crashes ipython-notebook kernel
show()
Update:
Okay, so ImageGrid
der Weg zu sein scheint zu gehen, aber meine Figur sucht noch ein bisschen wackelig:
Hier ist der Code, den ich verwendet:
fig = figure(dpi=300)
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.1)
for gridax, (i, sub) in zip(grid, enumerate(eyelink_data)):
subnum = i + start_with
# format data
xdat = sub['x'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]
ydat = sub['y'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]
# plot
gridax.hist2d(xdat, ydat, bins=1000)
plot(0, 0, 'ro') # origin
title('Subject {0} in-Trial Gaze'.format(subnum))
xlabel('Horizontal Offset\n(degrees visual angle)')
ylabel('Vertical Offset\n(degrees visual angle)')
xlim([-.005, .005])
ylim([-.005, .005])
show()
Es ist ein Kochbuch Beispiel: http://www.scipy.org/Cookbook/Matplotlib/Multiple_Subplots_with_One_Axis_Label (mehrere Beispiele in der Tat) –
fyi: 'tight_layout' sollte in der Figureninstanz aufgerufen werden, nicht die Achsen. "ImageGrid" ist jedoch der beste Weg zu gehen, IMO –
@PaulH, ack rechts. Schöner Fang! Vielen Dank! Edit: Das heißt, Sie würden denken, dass es eine explizite Ausnahme auslösen würde =/ – blz