Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

466
Vistas
Cómo alinear filas en la leyenda de matplotlib con 2 columnas

Tengo un problema en el que algunos formatos de texto matemático hacen que algunas etiquetas ocupen más espacio vertical que otras, lo que hace que no se alineen cuando se colocan en dos columnas en la leyenda. Esto es particularmente importante porque las filas también se usan para indicar datos relacionados.

Aquí hay un ejemplo:

 import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.mathtext as mathtext mpl.rc("font", family="Times New Roman",weight='normal') plt.rcParams.update({'mathtext.default': 'regular' }) plt.plot(1,1, label='A') plt.plot(2,2, label='B') plt.plot(3,3, label='C') plt.plot(4,4,label='$A_{x}^{y}$') plt.plot(5,5,label='$B_{x}^{y}$') plt.plot(6,6,label='$C_{x}^{y}$') plt.legend(fontsize='xx-large', ncol=2) plt.show()

Esto genera una figura como esta: ingrese la descripción de la imagen aquí

Por un tiempo, pude "fingir" un poco agregando algunos subíndices y superíndices vacíos, sin embargo, esto solo funciona cuando la trama se exporta a pdf. No parece funcionar al exportar a png. ¿Cómo puedo extender la primera columna de etiquetas para que se alineen con la segunda columna?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede establecer el argumento de la palabra clave handleheight en un número que sea lo suficientemente grande como para que la altura del controlador sea mayor que el espacio que ocupa la fuente. Esto hace que el texto aparezca alineado. Hacerlo puede requerir establecer el espacio entre labelspacing en un número pequeño, para que la leyenda no parezca demasiado grande.

 plt.legend(fontsize='xx-large', ncol=2,handleheight=2.4, labelspacing=0.05)

ingrese la descripción de la imagen aquí

El inconveniente de este método, como se puede ver en la imagen, es que las líneas se desplazan hacia arriba en comparación con la línea base del texto. Probablemente dependerá del caso de uso si esto es aceptable o no.

En caso de que no lo sea, hay que profundizar un poco más. Las siguientes subclases HandlerLine2D (que es el controlador de líneas) para establecer una posición ligeramente diferente para las líneas. Según el tamaño total de la leyenda, el tamaño de la fuente, etc., sería necesario adaptar el número xx en la clase SymHandler .

 from matplotlib.legend_handler import HandlerLine2D import matplotlib.lines class SymHandler(HandlerLine2D): def create_artists(self, legend, orig_handle,xdescent, ydescent, width, height, fontsize, trans): xx= 0.6*height return super(SymHandler, self).create_artists(legend, orig_handle,xdescent, xx, width, height, fontsize, trans) leg = plt.legend(handler_map={matplotlib.lines.Line2D: SymHandler()}, fontsize='xx-large', ncol=2,handleheight=2.4, labelspacing=0.05)

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda