Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plot in python that updates on keyboard hit

I've been struggling to achieve something that is trivial in Octave: to produce a series of plots, that change when I hit a key. Here's my octave code sample.

x = [1:10];
for c=1:3
    plot(x,c.*x);
    hold off;
    input('a');
end

When I try to do the same in python, I realized that python matplotlib has the save function, which puts it in non-blocking mode, and so I have to close the figure using a mouse, for the next figure to be produced. And the next figure is at a random other location on the screen. How can I get python to imitate the above behavior? I've tried various combinations of ion(), ioff(), plt.show(), plt.draw(), but haven't succeeded.

like image 879
elexhobby Avatar asked Nov 27 '25 04:11

elexhobby


1 Answers

You can do something fancier if you want, using mpl_connect

First import pylab

from pylab import *

Then define an updateData function that can be connected to the figure canvas.

i = 1
def updateData(event):
    global i,x
    i +=1
    y = i*x
    data.set_data(x,y)
    ylim(y[0],y[-1])
    draw()

i and x are global variables in this case. (This could be treated in better way, this is just an example!)

Then, create you plot and connect with your defined function.

f = figure()
data, = plot(x,x)
i=1
f.canvas.mpl_connect("key_press_event",updateData)
show()

Whenever you hit any key in the keyboard (When the figure window is selected) the function updateData is called, i is incremented and the plot updated.

Have fun!

like image 110
mrcl Avatar answered Nov 28 '25 20:11

mrcl



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!