动态更改matplotlib图的内容

3 投票
1 回答
8611 浏览
提问于 2025-04-15 17:56

之前,我在用Python和matplotlib比较两个函数的输出结果。这个过程其实很简单,因为用matplotlib画图很容易:我只需要用不同的标记画出两个数组就行了,简单得很。

现在我遇到了同样的问题,不过这次我有很多对曲线需要比较。一开始我尝试用不同的颜色和标记来画所有的曲线,但这样并不让我满意,因为每条曲线的范围并不一样。而且,我很快就用完了足够不同的颜色和标记(RGBCMYK,之后自定义的颜色和之前的颜色看起来差不多)。

我还尝试把每对曲线放在子图中,这样就得到了一个有很多图的窗口,但看起来太拥挤了。我也试过每个图一个窗口,但窗口太多了。

所以我在想,是否有现成的工具,或者你们有什么建议(或者其他想法)来解决这个问题:

我想看到一对曲线,然后可以轻松选择下一对,可以用滑动条、按钮、鼠标滚轮或其他任何工具或事件。切换曲线时,之前的曲线应该消失,图例也要改变,坐标轴也要相应调整。

1 个回答

10

我通过一个鼠标点击的事件处理器成功实现了这个功能。我会把它改成更有用的东西,不过我还是把我的解决方案发上来。

import matplotlib.pyplot as plt

figure = plt.figure()
# plotting
plt.plot([1,2,3],[10,20,30],'bo-')
plt.grid()
plt.legend()

def on_press(event):
    print 'you pressed', event.button, event.xdata, event.ydata
    event.canvas.figure.clear()
    # select new curves to plot, in this example [1,2,3] [0,0,0]
    event.canvas.figure.gca().plot([1,2,3],[0,0,0], 'ro-')
    event.canvas.figure.gca().grid()
    event.canvas.figure.gca().legend()
    event.canvas.draw()


figure.canvas.mpl_connect('button_press_event', on_press)

撰写回答