Ich bin neu in Python und Matplotlib und würde mich über jede Hilfe freuen, wie man Legenden für jeden Subplot erstellt, den ich mit einer FOR-Schleife erstellt habe. Hier ist der Code und das Beste, was ich der Beschriftung meiner Figuren nahe bringen konnte.
import matplotlib.pyplot as plt
import numpy as np
n_rows=2
n_cols=2
leg=['A','B','C','D']
fig, axes = plt.subplots(n_rows,n_cols)
for row_num in range(n_rows):
for col_num in range (n_cols):
ax = axes[row_num][col_num]
ax.plot(np.random.rand(20))
ax.set_title(f'Plot ({row_num+1}, {col_num+1})')
ax.legend(leg[row_num+col_num])
fig.suptitle('Main Title')
fig.tight_layout()
plt.show()
Hier ist die Ausgabe des Codes:
Bild mit falschen Legenden
Lösung des Problems
Sie verwenden ax.legend(leg[row_num+col_num])
aber row_num+col_num
keine korrekte Darstellung für einen Index einer Liste.
Dies ist, was passiert
row_num | col_num | idx=row_num+col_num | leg[idx]
0 | 0 | 0 | A
0 | 1 | 1 | B
1 | 0 | 1 | B
1 | 1 | 2 | C
Wenn Sie verwenden leg[row_num+col_num]
, erhalten Sie den falschen Legendeneintrag.
Es gibt viele Möglichkeiten, dies zu beheben. Eine einfache besteht darin, einen Zähler (die Variable j
im folgenden Code) einzuführen, der bei jeder Schleife inkrementiert wird.
import matplotlib.pyplot as plt
import numpy as np
n_rows=2
n_cols=2
leg=['A','B','C','D']
fig, axes = plt.subplots(n_rows,n_cols)
j = 0
for row_num in range(n_rows):
for col_num in range(n_cols):
ax = axes[row_num][col_num]
ax.plot(np.random.rand(20))
ax.set_title(f'Plot ({row_num+1}, {col_num+1})')
ax.legend(leg[j])
j += 1
fig.suptitle('Main Title')
fig.tight_layout()
plt.show()
Keine Kommentare:
Kommentar veröffentlichen