如何在Matplotlib中使用按钮在图表之间切换

时间:2018-11-10 17:47:33

标签: python matplotlib button diagram

是否有一种简单的方法,即可通过一个按钮在两个或多个图表之间进行切换?例如,我希望能够通过一个按钮在这两个图之间切换,而不必一个接一个地显示它们。

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 :(得分:1)

在这里,我从您提供的链接中修改了代码,以便根据当前绘制的值使用不同的值集。

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()

答案 1 :(得分:0)

对于那些想要在条形图或绘图图之间切换的用户(适用于两种类型的图)。我也认为这样做比较干净。

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()