Cómo utilizar botones de opción para controlar un gráfico de sectores en matplotlib
Tengo un pequeño problema en mi código y espero que alguien tenga una idea para ayudarme. Entonces, he creado un gráfico circular y, con RadioButtons, me gustaría ‘controlar’ el parámetro ‘explode’. Resultado esperado: tenemos un gráfico circular, tenemos RadioButtons y cuando hacemos clic en un botón de radio, en el gráfico circular se extrae la ‘serie’ que coincide con el botón de radio seleccionado (gracias a ‘explode’) y podemos hacerlo tantas veces como queramos.
Mi problema: he creado los botones de radio y, cuando se hace clic en ellos, se abre una nueva ventana con el resultado esperado, pero me gustaría tener el gráfico circular y los botones de radio en la misma ventana.
Mi código justo abajo:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons
rax = plt.axes([0.05, 0.7, 0.15, 0.15])
radio = RadioButtons(rax, ('0-4 ans', '5-10 ans', '11-13 ans', '14-17 ans'))
def explode_function(label):
labels = '0-4 ans', '5-10 ans', '11-13 ans', '14-17 ans'
sizes = [17.4, 25.7, 18.6, 38.3]
explode = (0, 0, 0, 0) # solo "explode" el segundo segmento (es decir, 'Hogs')
fig1, ax = plt.subplots()
if label == '0-4 ans':
explode = (0.15, 0, 0, 0)
elif label == '5-10 ans':
explode = (0, 0.15, 0, 0)
elif label == '11-13 ans':
explode = (0, 0, 0.15, 0)
elif label == '14-17 ans':
explode = (0, 0, 0, 0.15)
ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, colors=['lightblue', 'lightgreen', 'salmon', 'lightgray'])
plt.show()
radio.on_clicked(explode_function)
plt.show()
Muchas gracias y buenas tardes.
davy.ai
Para tener tanto el gráfico de sectores como los RadioButtons en la misma ventana, puedes mover el código que crea el gráfico de sectores fuera de la función
explode_function
.Aquí está el código modificado:
En esta versión, primero creamos el gráfico de sectores con valores predeterminados para el parámetro
explode
, y almacenamos los objetos devueltos comopie
. Luego, dentro de la funciónexplode_function
, modificamos el parámetroexplode
del objetopie
dependiendo de qué radio button se hace clic y volvemos a dibujar el gráfico conplt.draw()
. De esta manera, se utiliza la ventana original para mostrar el gráfico de sectores actualizado en lugar de crear uno nuevo cada vez.