Wie füge ich Unterplots in Matplotlib Titel hinzu?

225

Ich habe eine Figur, die viele Nebenhandlungen enthält.

fig = plt.figure(num=None, figsize=(26, 12), dpi=80, facecolor='w', edgecolor='k')
fig.canvas.set_window_title('Window Title')

# Returns the Axes instance
ax = fig.add_subplot(311) 
ax2 = fig.add_subplot(312) 
ax3 = fig.add_subplot(313) 

Wie füge ich den Nebenhandlungen Titel hinzu?

fig.suptitleFügt allen Diagrammen einen Titel hinzu, und obwohl ax.set_title()vorhanden, fügt letzterer meinen Untergrundstücken keinen Titel hinzu.

Danke für Ihre Hilfe.

Bearbeiten: Tippfehler über korrigiert set_title(). Danke Rutger Kassies

Shailen
quelle

Antworten:

201

ax.title.set_text('My Plot Title') scheint auch zu funktionieren.

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')
plt.show()

matplotlib fügt Titel zu Unterplots hinzu

Jarad
quelle
Für alle, die Probleme mit der Schriftgröße für ein Histogramm haben, kann ich sie seltsamerweise erhöhen, indem ich die Anzahl der Fächer reduziere. Ging von 500 auf 100.
mLstudent33
Wenn Sie die Schriftgröße angeben müssen, verwenden Sie ax.set_title('title', fontsize=16)stattdessen.
Tobias PG
234

ax.set_title() sollte die Titel für separate Nebenhandlungen festlegen:

import matplotlib.pyplot as plt

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]

    fig = plt.figure()
    fig.suptitle("Title for whole figure", fontsize=16)
    ax = plt.subplot("211")
    ax.set_title("Title for first plot")
    ax.plot(data)

    ax = plt.subplot("212")
    ax.set_title("Title for second plot")
    ax.plot(data)

    plt.show()

Können Sie überprüfen, ob dieser Code für Sie funktioniert? Vielleicht überschreibt sie etwas später?

Masteusz
quelle
1
Dies funktioniert für mich, Matplotlib Version 1.2.2 Python 2.7.5
NameOfTheRose
41

Eine Kurzantwort unter der Annahme import matplotlib.pyplot as plt:

plt.gca().set_title('title')

wie in:

plt.subplot(221)
plt.gca().set_title('title')
plt.subplot(222)
etc...

Dann sind keine überflüssigen Variablen erforderlich.

JMDE
quelle
8

Wenn Sie es kürzer machen möchten, können Sie schreiben:

import matplolib.pyplot as plt
for i in range(4):
    plt.subplot(2,2,i+1).set_title('Subplot n°{}' .format(i+1))
plt.show()

Es macht es vielleicht weniger klar, aber Sie brauchen nicht mehr Zeilen oder Variablen

SAGET Shinji
quelle
1

Wenn Sie mehrere Bilder haben und diese durchlaufen und zusammen mit den Titeln 1: 1 anzeigen möchten, können Sie dies tun. Ax1, ax2 usw. müssen nicht explizit definiert werden.

  1. Der Haken ist, dass Sie dynamische Achsen (ax) wie in Zeile 1 des Codes definieren und den Titel innerhalb einer Schleife festlegen können.
  2. Die Zeilen des 2D-Arrays sind die Länge (len) der Achse (ax)
  3. Jede Zeile enthält 2 Elemente, dh es handelt sich um eine Liste innerhalb einer Liste (Punkt Nr. 2).
  4. Mit set_title kann der Titel festgelegt werden, sobald die richtigen Achsen (ax) oder Unterzeichnung ausgewählt sind.
import matplotlib.pyplot as plt    
fig, ax = plt.subplots(2, 2, figsize=(6, 8))  
for i in range(len(ax)): 
    for j in range(len(ax[i])):
        ## ax[i,j].imshow(test_images_gr[0].reshape(28,28))
        ax[i,j].set_title('Title-' + str(i) + str(j))
Rishi Jain
quelle
1
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=1, ncols=4,figsize=(11, 7))

grid = plt.GridSpec(2, 2, wspace=0.2, hspace=0.5)

ax1 = plt.subplot(grid[0, 0])
ax2 = plt.subplot(grid[0, 1:])
ax3 = plt.subplot(grid[1, :1])
ax4 = plt.subplot(grid[1, 1:])

ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')

plt.show()

Geben Sie hier die Bildbeschreibung ein

Wojciech Moszczyński
quelle
0

Eine Lösung, die ich immer häufiger benutze, ist diese:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)  # 1
for i, ax in enumerate(axs.ravel()): # 2
    ax.set_title("Plot #{}".format(i)) # 3
  1. Erstellen Sie eine beliebige Anzahl von Achsen
  2. axs.ravel () konvertiert Ihr 2-Dim-Objekt in einen 1-Dim-Vektor im Zeilen-Major-Stil
  3. weist dem aktuellen Achsenobjekt den Titel zu
JMDE
quelle