是否可以使用内置箭头在要显示的绘图之间切换?

时间:2019-04-04 11:50:45

标签: python matplotlib

我正在尝试创建一个“程序”,使我可以在1个窗口中包含2个单独的图。我不想同时显示它们,我希望能够使用图形窗口底部的箭头在图形之间切换。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.style as style
import plotgen

style.use("bmh")
dp = 30

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1, label="ax1")
ax2 = fig.add_subplot(1,1,1, label="ax2")


cax = 2

plotgen.clear("plot1.txt")
plotgen.clear("plot2.txt")

def animate(i):
    if cax == 1:
        plotgen.generate("plot1.txt")
        graph_data = open('plot1.txt', 'r').read()
        lines = graph_data.split('\n')
        xs = []
        ys = []
        for line in lines:
            if len(line) > 1:
                x, y = line.split(',')
                xs.append(x)
                ys.append(float(y))
        ax1.clear()
        pxs = 0
        pys = 0
        lx = len(xs)
        ly = len(ys)
        if len(xs) < dp:
            pxs = xs
            pys = ys
        else:
            pxs = xs[(lx - (dp - 1)):(lx - 1)]
            pys = ys[(ly - (dp - 1)):(ly - 1)]
        ax1.plot(pxs, pys, "r")
    elif cax == 2:
        plotgen.generate("plot2.txt")
        graph_data = open('plot2.txt', 'r').read()
        lines = graph_data.split('\n')
        xs = []
        ys = []
        for line in lines:
            if len(line) > 1:
                x, y = line.split(',')
                xs.append(x)
                ys.append(float(y))
        ax2.clear()
        pxs = 0
        pys = 0
        lx = len(xs)
        ly = len(ys)
        if len(xs) < dp:
            pxs = xs
            pys = ys
        else:
            pxs = xs[(lx - (dp - 1)):(lx - 1)]
            pys = ys[(ly - (dp - 1)):(ly - 1)]
        ax2.plot(pxs, pys)

ani = animation.FuncAnimation(fig, animate, interval=500)
plt.show()

目前,我正在使用cax变量在想要在图形上看到的图形之间切换,这是我想使用箭头增加或减小的图形。

由于某种原因,我看不到ax1子图,我认为它在ax2之后。数据生成对这两者都适用。

我只是想澄清我想要的答案:

1:“是否可以使用箭头在图之间切换?”

2:“在绘制另一幅图时是否可能使它不可见(同时移除x和y轴,以免它们混合在一起)”

3:“为什么我看不到ax1?”

1 个答案:

答案 0 :(得分:0)

我通过使用ax1解决了ax2.set_visible(False)无法显示的问题。当我更改绘图时,我再次使其可见并使ax1不可见。

我还使用以下简短代码将按钮添加到绘图中:

axnext = plt.axes([0.80, 0.01, 0.06, 0.06])
axprev = plt.axes([0.73, 0.01, 0.06, 0.06])

bnext = Button(axnext, 'Next >')
bnext.on_clicked(self.changePlotNext)
bprev = Button(axprev, "< Previous")
bprev.on_clicked(self.changePlotPrev)

然后,我刚刚添加了简单的函数,这些函数将增加或减少我拥有的cax变量。我必须对动画函数进行一些较小的编辑以节省绘图时的资源,并且我还删除了第二个子图并决定只使用一个子图。