es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Espaciado equitativo entre gráficos circulares de diferentes tamaños en matplotlib

Tengo dificultades para establecer un espacio igual entre gráficos circulares de diferentes tamaños. Los 5 están correctamente dispuestos en una fila, pero la distancia entre los contornos de gráficos vecinos no es igual. Probé muchas abreviaturas del siguiente código, todas ellas no hacen una gran diferencia en la salida (ver imagen):

código:

import matplotlib.pyplot as plt
import pandas as pd
labels = 'Verkehr', 'Maschinen und Motoren', 'Feuerungen', 'Industrie / Gewerbe', 'Land- und Forstwirtschaft'
sizesax1 = [108295, 10107, 7220, 11551, 7220]
sizesax2 = [77882, 6676, 6676, 13351, 6676]
sizesax3 = [55652, 4417, 6184, 15900, 6184]
sizesax4 = [36327, 2642, 4632, 16512, 5944]
sizesax5 = [18781, 1409, 3287, 1878, 4695]

fig, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(1, 5, figsize =(20,4))
ax1.pie(sizesax1, startangle=0, colors = ('red', 'darkblue', 'orange', 'yellow', 'green'), radius=1*4)
ax2.pie(sizesax2, startangle=0, colors = ('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.77*4)
ax3.pie(sizesax3, startangle=0, colors = ('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.61*4)
ax4.pie(sizesax4, startangle=0, colors = ('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.46*4)
ax5.pie(sizesax5, startangle=0, colors = ('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.33*4)

algunas adiciones que intenté:

fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=1, hspace=None)

o

fig.tight_layout ()
#dándome este mensaje de error:
/srv/conda/envs/notebook/lib/python3.7/site-packages/ipykernel_launcher.py:17: UserWarning:
Tight layout not applied. The bottom and top margins cannot be made large enough to
accommodate all axes decorations.

y algunas más.

¡Muchas gracias por leer esto! Soy un principiante completo en Python y acabo de conseguir llegar tan lejos como se ve en esta imagen:

View post on imgur.com

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es ajustar las proporciones de ancho de los subgráficos utilizando el parámetro gridspec_kw de la función subplots(). Esto le permite especificar las proporciones relativas de las columnas en la cuadrícula de la figura, y puede ayudar a lograr un espaciado más equilibrado entre las gráficas circulares. Aquí hay un ejemplo:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    labels = ['Verkehr', 'Maschinen und Motoren', 'Feuerungen', 'Industrie / Gewerbe', 'Land- und Forstwirtschaft']
    sizesax1 = [108295, 10107, 7220, 11551, 7220]
    sizesax2 = [77882, 6676, 6676, 13351, 6676]
    sizesax3 = [55652, 4417, 6184, 15900, 6184]
    sizesax4 = [36327, 2642, 4632, 16512, 5944]
    sizesax5 = [18781, 1409, 3287, 1878, 4695]
    
    fig, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(1, 5, figsize=(20, 4), gridspec_kw={'width_ratios': [1, 1.1, 1.2, 1.3, 1.4]})
    
    ax1.pie(sizesax1, startangle=0, colors=('red', 'darkblue', 'orange', 'yellow', 'green'), radius=1*4)
    ax2.pie(sizesax2, startangle=0, colors=('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.77*4)
    ax3.pie(sizesax3, startangle=0, colors=('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.61*4)
    ax4.pie(sizesax4, startangle=0, colors=('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.46*4)
    ax5.pie(sizesax5, startangle=0, colors=('red', 'darkblue', 'orange', 'yellow', 'green'), radius=.33*4)
    
    plt.show()
    

    Observe cómo he especificado el parámetro width_ratios utilizando una lista de números; estos corresponden al ancho relativo de cada columna del subgráfico. Los ajusté manualmente para lograr un espaciado más equilibrado en este caso particular, pero es posible que necesite experimentar un poco para encontrar los valores correctos para sus gráficas circulares específicas.

    ¡Espero que esto ayude! Por favor, avíseme si tiene más preguntas.

Comments are closed.