2016-04-13 6 views
2

Ich habe eine Reihe von 9 Unterplots in einem 3x3 Raster, jede Unterplot mit einem Titel. Ich möchte für jede Zeile einen Titel hinzufügen. Um dies zu tun, habe ich über die Verwendung von Suptitle nachgedacht. Das Problem ist, wenn ich 3 suptitles benutze, scheinen sie überschrieben zu werden und nur das letzte scheint gezeigt zu werden.Mehrere Titel (suptitle) mit Unterplots

Hier ist mein Grundcode:

fig, axes = plt.subplots(3,3,sharex='col', sharey='row') 

for j in range(9): 
    axes.flat[j].set_title('plot '+str(j)) 

plt1 = fig.suptitle("row 1",x=0.6,y=1.8,fontsize=18) 
plt2 = fig.suptitle("row 2",x=0.6,y=1.2,fontsize=18) 
plt3 = fig.suptitle("row 3",x=0.6,y=0.7,fontsize=18) 
fig.subplots_adjust(right=1.1,top=1.6) 

enter image description here

+0

Warum nicht einfach 'set_title' der Achsen 1, 4, 7 (' j% 3 == 1 ') und den Rest klären? – wflynny

+0

Da ich immer noch den Titel für jedes Teilplot benötigt, plus einen Titel für die Zeile – Alessandro

+0

, kann man nur ein "Suptitle" pro Figur haben. Ich würde vorschlagen, 'text' Objekte für die Zeile Titel – tom

Antwort

3

Sie mit den Titeln und Etiketten basteln können. Überprüfen Sie das folgende Beispiel aus dem Code angepasst:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(3,3,sharex='col', sharey='row') 

counter = 0 
for j in range(9): 
    if j in [0,3,6]: 
     axes.flat[j].set_ylabel('Row '+str(counter), rotation=0, size='large',labelpad=40) 
     axes.flat[j].set_title('plot '+str(j)) 
     counter = counter + 1 
    if j in [0,1,2]: 
     axes.flat[j].set_title('Column '+str(j)+'\n\nplot '+str(j)) 
    else: 
     axes.flat[j].set_title('plot '+str(j)) 

plt.show() 

, was zur Folge hat:

Row and Columns titles

+0

Das ist eine gute Lösung, obwohl die Länge meines Titels nicht ganz machbar – Alessandro

+0

@Alessandro Sie können die Schriftgröße von Etiketten zu verwalten etwas besser gespeichert. Das große Problem bei dieser Methode ist, wenn Sie zB Columns und Titeln verschiedene Formate geben wollen. – armatita

+0

Leider haben meine Subplots kein Ylabel. Ich habe eine [ähnliche Frage hier] (https://stackoverflow.com/questions/47777296) gepostet, um eine andere Problemumgehung zu suchen. –

Verwandte Themen