我正在尝试创建一个“程序”,使我可以在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
?”
答案 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
变量。我必须对动画函数进行一些较小的编辑以节省绘图时的资源,并且我还删除了第二个子图并决定只使用一个子图。