我正在尝试创建一个"程序",允许我在 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
?
我通过使用ax2.set_visible(False)
解决了ax1
不显示的问题。当我更改情节时,我使其再次可见并使 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
变量。我不得不对我的动画功能进行一些小的编辑,以节省绘图时的资源,我还删除了第二个子图,并决定只使用一个子图。