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

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


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?


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.


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


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))

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.