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.

Gráfico circular de Matplotlib en Python: fusionar dos sectores con títulos idénticos juntos.

Estoy realizando un proyecto con matplotlib en el que utilizo gráficas de torta y me gustaría fusionar dos porciones de una gráfica de torta con títulos idénticos para formar una sola porción grande con el mismo título.

Sin embargo, matplotlib deja las porciones separadas, incluso si tienen el mismo título.

¿Me podrían decir cómo puedo hacer eso? Gracias.

Y sí, aquí hay un poco de código.

from matplotlib import pyplot as plt
list0 = [1,2,3]
list1 = ["manzana", "plátano", "plátano"]
plt.pie(list0, labels = list1)
plt.show()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para fusionar dos segmentos en un gráfico circular con títulos idénticos, primero puedes sumar los valores de estos dos segmentos y luego crear una nueva lista para ambos valores y etiquetas correspondientes, donde los dos segmentos se fusionen en uno solo. Aquí te muestro cómo puedes modificar tu código para lograr esto:

    from matplotlib import pyplot as plt
    
    list0 = [1, 2, 3]
    list1 = ["manzana", "plátano", "plátano"]
    
    # Encuentra los índices de las etiquetas duplicadas y suma sus valores
    duplicados = set([x for x in list1 if list1.count(x) > 1])
    valores_fusionados, etiquetas_fusionadas = [], []
    for dup in duplicados:
        indices = [i for i, x in enumerate(list1) if x == dup]
        valores = [list0[i] for i in indices]
        valores_fusionados.append(sum(valores))
        etiquetas_fusionadas.append(dup)
    
    # Crea una nueva lista de valores y etiquetas con los segmentos fusionados
    nuevos_valores = [val for val in list0 if val not in valores_fusionados]
    nuevas_etiquetas = [etiqueta for etiqueta, val in zip(list1, list0) if val not in valores_fusionados]
    for i, etiqueta in enumerate(etiquetas_fusionadas):
        nuevas_etiquetas.append(etiqueta)
        nuevos_valores.append(valores_fusionados[i])
    
    # Grafica el nuevo gráfico circular
    plt.pie(nuevos_valores, labels=nuevas_etiquetas)
    plt.show()
    

    Este código primero identificará las etiquetas duplicadas en list1 y encontrará sus índices en list1 y los valores correspondientes en list0. Luego sumará los valores y agregará la etiqueta a la lista etiquetas_fusionadas. Después de eso, creará una nueva lista de valores y etiquetas con los segmentos fusionados. Por último, creará el nuevo gráfico circular con los nuevos valores y etiquetas usando plt.pie().

Comments are closed.