Изменение настроек виджета RadioButtons в matplotlib
В своём коде я строю графики. Графиков много. Для переключения между графиками я использую RadioButtons. Расположение переключателей задаю кодом:
rax = plt.axes([0.905, 0.545, 0.09, 0.45], facecolor='yellow')
radio = RadioButtons(rax, ('SBX', 'SBIX', 'DCPKU1', 'DCPKU2', 'SSKPT', 'SSKHA', 'SOC', 'SOO1', 'SOCU','DCK', 'PUPK', 'SOP1.1', 'SOU', 'SOFU1', 'SOFU2', 'SOFU3', 'SOFU4', 'SOFU5','DCR', 'DCZ2','DCZ1', 'SOP1', 'SSKU', 'SOF', 'SBXM', 'CTO'))
Когда кнопок не много (5...6), то они отображаются красиво и эстетично. Но когда их много, "кружки" кнопок сжимаются до размера точек. Подскажите пожалуйста, как я могу настроить размеры панели и размеры кнопок. Чтение Tutorials по matplotliby ничего не дало. Буду очень рад помощи. Спасибо!

Ответы (1 шт):
На просторах англоязычного https://stackoverflow.com/ нашёл интересный вариант решения. Адаптировал под свои нужды. Может быть кому-то пригодится или "доработает" под лучший результат.
class MyRadioButtons(RadioButtons):
def __init__(self, ax, labels, active=0, activecolor='blue', size=80, orientation="vertical", **kwargs):
AxesWidget.__init__(self, ax)
self.activecolor = activecolor
axcolor = ax.get_facecolor()
self.value_selected = None
ax.set_xticks([])
ax.set_yticks([])
ax.set_navigate(False)
circles = []
for i, label in enumerate(labels):
if i == active:
self.value_selected = label
facecolor = activecolor
else:
facecolor = axcolor
p = ax.scatter([],[], s=size, marker="o", edgecolor='black', facecolor=facecolor)
circles.append(p)
if orientation == "horizontal":
kwargs.update(ncol=len(labels), mode="expand")
kwargs.setdefault("frameon", False)
self.box = ax.legend(circles, labels, **kwargs)
self.labels = self.box.texts
self.circles = self.box.legendHandles
for c in self.circles:
c.set_picker(5)
self.cnt = 0
self.observers = {}
self.connect_event('pick_event', self._clicked)
def _clicked(self, event):
if (self.ignore(event) or event.mouseevent.button != 1 or
event.mouseevent.inaxes != self.ax):
return
if event.artist in self.circles:
self.set_active(self.circles.index(event.artist))
