GOOGLE ADS

Samstag, 30. April 2022

Legende in Matplotlib - Subplotting durch eine For-Schleife

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_numkeine 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 jim 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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...