GOOGLE ADS

jueves, 14 de abril de 2022

Leyenda en Matplotlib -- Subtrazado por un bucle For

Soy nuevo en Python y Matplotlib, agradecería cualquier ayuda sobre cómo crear leyendas para cada subparcela que he creado con un bucle FOR. Aquí está el código y lo mejor que pude acercarme para etiquetar mis figuras.

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

aquí está la salida del código:
Imagen con leyendas incorrectas


Solución del problema

Está utilizando ax.legend(leg[row_num+col_num])pero row_num+col_numno es una representación correcta para un índice de una lista.

esto es lo que esta pasando

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

Si usa leg[row_num+col_num], obtiene la entrada de leyenda incorrecta.

Hay muchas maneras de arreglar esto. Una simple es introducir un contador (la variable jen el código a continuación), que se incrementa en cada bucle.

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

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...