Hi all,
I’m working on a little =
app that can
display time data, fft data + a trace of fft data (like a =
spectrogram).
For now performances are just OK =
so I was
looking for something that can improve the whole =
thing.
I’ve just discovered =
blitting
features of matplotlib, wow !
It seems that this is what was =
missing to
me J
Taking a look at this example http://matplotlib.sourceforge.net/examples/animation/animati=
on_blit_qt4.html
I’ve understood that I can =
avoid redraw
the background each time using blitting, thus for my two first graph =
that change
every frame, I can blit the background and then draw the time and fft =
values.
This should improve performances =
a lot.
Am I true?
Now, assuming I’m true =
here is the
tricky question J
The third graph is an imshow =
with an array
of plot that is refreshed each frame. Basically each time I got a new =
FFT I
rotate the whole array of point from right to left and add a new line of =
data
into the array on the vertical line at the top right of the =
drawing.
Then I draw with =
imshow.
Not to say that it is ultra =
inefficient because:
1/I need to rotate the array =
that cost a
lot of time (I needed to limit the array to 256*1024) (downscaling y =
values to
match figure height)
2/the whole thing is redrawn =
entirely each
time.
Here is the function that rotate =
points (if
it could help you understand):
def setValue(self, =
value):
div =3D len(value)/self._height =
&=
nbsp; #w=
e
compute how much we want to downscale Y
r =3D =
zeros((self._height,1)) &n=
bsp;
&=
nbsp; #I
create an blank line
x =3D =
array(value) &=
nbsp; &n=
bsp;
&=
nbsp; #i
transform new values into a array
for i in =
xrange(self._height): &nbs=
p; =
;
#downscaling algo
=
r[i,0] =3D x[div*i:div*(i+1)].max()
self._value =3D hstack([self._value[:,1:],r]) #and rotating =
the full
array, ouch!
self._cbar.set_array(self._value)
So, here is my question, should =
it be possible
thx to blitting feature:
1/first do a full drawing like =
today
2/each time I receive a new line =
of data:
 I =
want to blit
lines from x=3D(1 to xmax) into x=3D(0 to xmax1)
=

Only draw the new line of data at position xmax (using imshow =
coloring…)
Can you help me giving me some =
directions?
(if this kind of thing is possible…)
Cheers,
Laurent