¿Cómo crear una sola leyenda para todas las subparcelas en Matplotlib?

La función subplot() en matplotlib ayuda a crear una cuadrícula de subtramas dentro de una sola figura. En una figura, las subparcelas se crean y ordenan por filas desde la parte superior izquierda. Una leyenda en la biblioteca Matplotlib básicamente describe los elementos del gráfico. La leyenda() se puede personalizar y ajustar en cualquier lugar dentro o fuera del gráfico colocándolo en varias posiciones. A veces es necesario crear una sola leyenda para todas las subparcelas. A continuación se muestran los ejemplos que muestran una sola leyenda para todas las subparcelas.

Sintaxis de subtrama():

subplot(nrows,ncols,nsubplot)

Por ejemplo, subparcela (2,1,1) es la figura que representa la primera subparcela con 2 filas y una columna, la primera subparcela se encuentra en la primera fila.

La subparcela (2,1,2) representa la segunda subparcela que se encuentra en la segunda fila de la primera columna. 

La sintaxis del comando de leyenda:

legend(*args, **kwargs)

Si la longitud de los argumentos, es decir, args, es 0 en el comando de leyenda, genera automáticamente la leyenda a partir de las propiedades de la etiqueta llamando al método get_legend_handles_labels().

 Por ejemplo, ax.legend() es equivalente a:

handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels)

El método get_legend_handles_labels() devuelve una tupla de dos listas, es decir, una lista de artistas y una lista de etiquetas. 

Ejemplo 1:

Python3

# Importing required libraries
import matplotlib.pyplot as plt
import numpy as np
  
# 2 subplots in 1 row and 2 columns
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
  
x1 = ['Telugu', 'Hindi', 'English',
      'Maths', 'Science', 'Social']
y1 = [45, 34, 30, 45, 50, 38]
y2 = [36, 28, 30, 45, 38, 48]
  
# Labels to use in the legend for each line
labels = ["in 2019", "in 2020"]
  
# Title for subplots
fig.suptitle('Number of Students passed in each subject\
from a class in 2019 & 2020', fontsize=20)
  
# Creating the sub-plots.
l1 = ax1.plot(x1, y1, color="green")
l2 = ax2.plot(x1, y2, color="blue")
  
ax1.set_yticks(np.arange(0, 51, 5))
ax2.set_yticks(np.arange(0, 51, 5))
  
ax1.set_ylabel('Number of students', fontsize=25)
  
  
fig.legend([l1, l2], labels=labels,
           loc="upper right")
  
# Adjusting the sub-plots
plt.subplots_adjust(right=0.9)
  
plt.show()

Producción:

Ejemplo 2:

Python3

# Plotting sub-plots of number of 
# students passed in each subject 
# in academic year 2017-20.
import matplotlib.pyplot as plt
import numpy as np
  
plt.style.use('seaborn')  # Plot Styles
  
fig = plt.figure()
  
# 4 subplots in 2 rows and 2 columns in a figure
axes = fig.subplots(nrows=2, ncols=2)
  
axes[0, 0].bar(['Telugu', 'Hindi', 'English', 
                'Maths', 'Science', 'Social'],
               [50, 27, 42, 34, 45, 48], 
               color='g', label="Students passed in 2017")
  
axes[0, 0].set_yticks(np.arange(0, 51, 5))
  
axes[0, 1].bar(['Telugu', 'Hindi', 'English', 
                'Maths', 'Science', 'Social'],
               [50, 27, 42, 34, 45, 48], 
               color='y', label="Students passed in 2018")
  
axes[0, 1].set_yticks(np.arange(0, 51, 5))
  
axes[1, 0].bar(['Telugu', 'Hindi', 'English', 
                'Maths', 'Science', 'Social'],
               [40, 27, 22, 44, 35, 38],
               color='r', label="Students passed in 2019")
  
axes[1, 0].set_yticks(np.arange(0, 51, 5))
axes[1, 0].set_xlabel('Subjects', fontsize=25)
  
# rotating third sub-plot x-axis labels
for tick in axes[1, 0].get_xticklabels():
    tick.set_rotation(45)
  
axes[1, 0].set_ylabel(" Number of Students passed in 2017-2020", fontsize=20)
  
  
axes[1, 1].bar(['Telugu', 'Hindi', 'English',
                'Maths', 'Science', 'Social'],
               [40, 27, 32, 44, 45, 48], 
               color='b', label="Students passed in 2020")
  
axes[1, 1].set_xlabel('Subjects', fontsize=20)
axes[1, 1].set_yticks(np.arange(0, 51, 5))
  
  
lines = []
labels = []
  
for ax in fig.axes:
    Line, Label = ax.get_legend_handles_labels()
    # print(Label)
    lines.extend(Line)
    labels.extend(Label)
  
# rotating x-axis labels of last sub-plot
plt.xticks(rotation=45)
  
fig.legend(lines, labels, loc='upper right')
  
plt.show()

Producción :

Publicación traducida automáticamente

Artículo escrito por greeshmanalla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *