是否有一种简单的方法,即可通过一个按钮在两个或多个图表之间进行切换?例如,我希望能够通过一个按钮在这两个图之间切换,而不必一个接一个地显示它们。
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()
我知道那里有解决此问题的示例,但我根本无法使它正常工作...
这里是链接,他们在其中显示了操作方法,但我不知道该怎么做...
答案 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()