Как переключаться между диаграммами с помощью кнопки в Matplotlib - PullRequest
0 голосов
/ 10 ноября 2018

Есть ли простой способ переключаться между двумя или более диаграммами с помощью кнопки? Я хотел бы, например, иметь возможность переключаться между этими двумя диаграммами с помощью кнопки вместо того, чтобы показывать их одну за другой.

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.bar(x_values, y_values)
plt.show()

x_values = [5, 4, 3, 2, 1]
y_values = [1, 4, 9, 16, 25]
plt.bar(x_values, y_values)
plt.show()

Я знаю, что есть примеры этой проблемы, но я просто не могу заставить ее работать ...

Вот ссылка, где показывают, как это сделать, но я не понимаю, как это сделать ...

Ссылка: https://matplotlib.org/gallery/widgets/buttons.html

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Для тех, кто хочет переключаться между гистограммой или графиком (работает для обоих типов диаграмм). Я также думаю, что это намного чище.

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


class Index(object):

    def start(self, event=None):
        ax.clear()
        x_values = [1, 2, 3, 4, 5]
        y_values = [3, 5, 2, 19, 1]
        ax.bar(x_values, y_values)
        plt.draw()

    def next(self, event):
        ax.clear()
        x_values = [1, 2, 3, 4, 5]
        y_values = [20, 15, 10, 5, 1]
        ax.bar(x_values, y_values)
        plt.draw()

    def prev(self, event):
        ax.clear()
        x_values = [1, 2, 3, 4, 5]
        y_values = [1, 5, 10, 15, 20]
        ax.bar(x_values, y_values)
        plt.draw()

ax  = plt.gca()
callback = Index()
callback.start()

axprev = plt.axes([0.59, 0.002, 0.1, 0.075])
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)
axstart = plt.axes([0.7, 0.002, 0.1, 0.075])
bstart = Button(axstart, 'Start')
bstart.on_clicked(callback.start)
axnext = plt.axes([0.81, 0.002, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)

plt.show()
0 голосов
/ 10 ноября 2018

Здесь я изменил код по предоставленной вами ссылке, чтобы он использовал разные наборы значений в зависимости от того, какие значения отображаются в данный момент.

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

x1_values = [1, 2, 3, 4, 5]
y1_values = [1, 4, 9, 16, 25]
l, = plt.plot(x1_values, y1_values)


class Index(object):
    def __init__(self):
        self.current = 1

        self.x1 = [5, 4, 3, 2, 1]
        self.y1 = [1, 4, 9, 16, 25]

        self.x2 = [1, 2, 3, 4, 5]
        self.y2 = [1, 4, 9, 16, 25]

    def plot(self, x):
        self.current += 1

        if self.current%2:
            self.values1()
        else:
            self.values2()

    def values1(self):
        l.set_xdata(self.x1)
        l.set_ydata(self.y1)
        plt.draw()

    def values2(self):
        l.set_xdata(self.x2)
        l.set_ydata(self.y2)
        plt.draw()

callback = Index()
axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
bprev = Button(axnext, 'Switch')
bprev.on_clicked(callback.plot)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...