动态更改matplotlib图的内容
之前,我在用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)