Hi guys, continuing exploring matplotlib
capabilities J
I’ve applied the idea you’ve
said later about colormap.
Now I would like on an event to refresh my
view so I’ve written this code:
…
def InitCode(self):
…
self.norm
= plt.Normalize(vmin=0, vmax=255)
self.cmap = cm.jet
im_full = full_sonar.imshow( z, aspect= ‘auto’, cmap=self.cmap, norm=self.norm,
interpolation=‘quadric’)
im_zoom = zoomed_sonar.imshow( z, aspect= ‘auto’,cmap=self.cmap,
norm=self.norm, interpolation=‘quadric’)
self.fig.colorbar(im_full,cax=cax,orientation=‘vertical’,extend=‘both’)
self.im_full = im_full
self.im_zoom = im_zoom
…
def
updateSonarView(self):
self.im_full.set_cmap(self.cmap)
self.im_zoom.set_cmap(self.cmap)
self.im_full.set_norm(self.norm)
self.im_zoom.set_norm(self.norm)
self.fig.canvas.draw()
def OnUpdateButton(self,
event):
self.low_clutter_val = self.clutter_low.GetPosition()
self.high_clutter_val = self.clutter_high.GetPosition()
self.norm = plt.Normalize(vmin=self.low_clutter_val,
vmax=self.high_clutter_val)
self.updateSonarView()
But I get this error from the lib :
Traceback (most recent call last):
File
“./Filters\A1Filter.py”, line 183, in OnUpdateButton
self.updateSonarView()
File “./Filters\A1Filter.py”,
line 157, in updateSonarView
self.im_full.set_norm(self.norm)
File
“C:\Python25\Lib\site-packages\matplotlib\cm.py”, line 129, in
set_norm
self.changed()
File
“C:\Python25\Lib\site-packages\matplotlib\image.py”, line 123, in changed
cm.ScalarMappable.changed(self)
File
“C:\Python25\Lib\site-packages\matplotlib\cm.py”, line 174, in
changed
self.callbacksSM.process(‘changed’, self)
File
“C:\Python25\Lib\site-packages\matplotlib\cbook.py”, line 152, in
process
func(*args, **kwargs)
File
“C:\Python25\Lib\site-packages\matplotlib\figure.py”, line 1028, in
on_changed
cb.update_bruteforce(m)
File
“C:\Python25\Lib\site-packages\matplotlib\colorbar.py”, line 649, in
update_bruteforce
self.draw_all()
File “C:\Python25\Lib\site-packages\matplotlib\colorbar.py”,
line 221, in draw_all
self._process_values()
File
“C:\Python25\Lib\site-packages\matplotlib\colorbar.py”, line 458, in
_process_values
b =
self.norm.inverse(self._uniform_y(self.cmap.N+1))
File
“C:\Python25\Lib\site-packages\matplotlib\colors.py”, line 652, in
inverse
return vmin + val *
(vmax - vmin)
File
“C:\Python25\Lib\site-packages\numpy\ma\core.py”, line 1686, in
mul
return multiply(self,
other)
File “C:\Python25\Lib\site-packages\numpy\ma\core.py”,
line 503, in call
result = self.f(d1, d2,
*args, **kwargs).view(get_masked_subclass(a,b))
ValueError: shape mismatch: objects cannot
be broadcast to a single shape
UpdateSonarview works flawlessly if I
modify the colormap (self.cmap) and call it then.
If I modify self.norm and call
UpdateSonarView I get this crash.
Is it a bug from my bad usage of the lib?
If not, I can perhaps send you a stripped down file showing the problem?
Using matplotlib 0.98.1 under windows.
Laurent