Использование RadioButtons в matplotlib

Разбираю пример работы RadioButtons в matplotlib.

Вот простой пример:

import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons


x   =[80, 85, 90, 95, 100, 105]
s0 = [30, 22.5, 15, 7.5, 0, -7.5]
s1 = [29, 21.5, 14, 6.5, -1, -8.5]
s2 = [31, 23.5, 16, 8.5, 1, -6.5]

fig, ax = plt.subplots()
L0, = ax.plot(x, s0, lw=2, color='red')
plt.subplots_adjust(left=0.3)

rax = plt.axes([0.05, 0.7, 0.15, 0.15], facecolor='yellow')
radio = RadioButtons(rax, ('1-я', '2-я', '3-я'))

def hzfunc(label):
    hzdict = {'1-я': s0, '2-я': s1, '3-я': s2}
    ydata = hzdict[label]
    L0.set_ydata(ydata)
    plt.draw()
    
radio.on_clicked(hzfunc)

plt.show()

В данном примере, при переключении RadioButtons всегда строится один график. Необходимо чтобы при переключении построилось два графика сразу.

Подскажите, пожалуйста, как это реализовать. Спасибо!


Ответы (2 шт):

Автор решения: ClickName

Я вот так переписал вашу программу. Ничего красивого она не строит, зато изменив код очевидным способом вы сможете построить сколько угодно каких вам нужно графиков нажатием на соответствующие кнопки.

import matplotlib.pyplot as plt

from matplotlib.widgets import RadioButtons

x   =[80, 85, 90, 95, 100, 105]

s0 = [30, 22.5, 15, 7.5, 0, -7.5]

s1 = [29, 21.5, 14, 6.5, -1, -8.5]

s2 = [31, 23.5, 16, 8.5, 1, -6.5]

fig, ax = plt.subplots()

L0, = ax.plot(x, s0, lw=2, color='red')


plt.subplots_adjust(left=0.3)



rax = plt.axes([0.05, 0.7, 0.15, 0.15], facecolor='yellow')

radio = RadioButtons(rax, ('1-я', '2-я', '3-я'))

def f_s0(ax, x):
    ax.plot(x,s0)

def f_s1(ax, x):
    ax.plot(x,s1)
    ax.plot([1,100],[100,1],'ro')

def f_s2(ax, x):
    ax.plot(x,s2)
    

def hzfunc(label):
    ax.cla()
    hzdict = {'1-я': f_s0, '2-я': f_s1, '3-я': f_s2}
    
    hzdict[label](ax, x)
    
    
radio.on_clicked(hzfunc)

plt.show()
→ Ссылка
Автор решения: S. Nick

Попробуйте так:

import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons


x = [80, 85, 90, 95, 100, 105]
s0 = [30, 22.5, 15, 7.5, 0, -7.5]
s1 = [0, 21.5, 4, 6.5, -1, -8.5]
s2 = [1, 23.5, 16, 8.5, 1, 6.5]

fig, ax = plt.subplots(2)                                    # +++  2
plt.subplots_adjust(left=0.3)

rax = plt.axes([0.05, 0.7, 0.15, 0.15], facecolor='yellow')
radio = RadioButtons(rax, ('1-я', '2-я', '3-я'))

def hzfunc(label):
    ax[1].clear()
    if label == "2-я":
        ax[1].plot(x, s1, lw=2, color='blue')
        ax[1].set_title("2-я")
    elif label == "3-я": 
        ax[1].plot(x, s2, lw=2, color='green')
        ax[1].set_title("3-я")
    elif label == "1-я":
        ax[1].axis('off')
    plt.draw()
    
radio.on_clicked(hzfunc)

ax[0].plot(x, s0, lw=2, color='red')
ax[0].set_title("1-я")
ax[1].axis('off')

plt.show()

введите сюда описание изображения

→ Ссылка