[Matplotlib-users] How to get correct xtick labels with zooming and panning

2011-08-16 Thread Fiedler, Lars - 0447 - MITLL
Hi,

  If I create a bar graph inside a FigureCanvas, how do I get the correct x
tick labels to display when someone does a zoom with the NavigationToolbar?

 

For example, lets say I've got the below code:

self.axes.set_xticks = range(len(vals))

self.axes.set_xticklabels(xLabels)

self.axes.bar(

left=range(len(vals)), 

height=map(float, vals), 

width=.2, 

align='center', 

alpha=0.44,

picker=5)

 

If the number of values is very large, then matplotlib seems to select only
a few x labels to display (selecting far left and right, and some in the
middle), but it's choosing the first ones in the specified label array,
instead of indexing into it.  

 

I've tried setting the tick labels, based on the ticks it's selected,
(setting labels based on the ticks after the bar has been created) and that
seems to work on the initial load, but then if someone zooms into a
particular part, it doesn't update the labels to the correct range . It's
almost like I would need a callback to reset the labels .

 

Ideas?

 

Cheers,

  Lars

 

 



smime.p7s
Description: S/MIME cryptographic signature
--
uberSVN's rich system and user administration capabilities and model 
configuration take the hassle out of deploying and managing Subversion and 
the tools developers use with it. Learn more about uberSVN and get a free 
download at:  http://p.sf.net/sfu/wandisco-dev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] How to get correct xtick labels with zooming and panning

2011-08-16 Thread Fiedler, Lars - 0447 - MITLL
I ended up creating a wrapper around the toolbar and resetting the labels
and redrawing whenever something changes.  Is there a cleaner way?

 

class WrappedNavigationToolbar(NavigationToolbar):



def __init__(self, viewer, canvas, parent):

self.viewer = viewer

super(WrappedNavigationToolbar, self).__init__(canvas, parent)



def release_zoom(self, event):

print release zoom

super(WrappedNavigationToolbar, self).release_zoom(event)

self.viewer.resetLabels()

self.draw()



def release_pan(self, event):

print release_pan

super(WrappedNavigationToolbar, self).release_pan(event)

self.viewer.resetLabels()

self.draw()



def home(self, *args):

print home

super(WrappedNavigationToolbar, self).home(*args)

self.viewer.resetLabels()

self.draw()

 

def forward(self, *args):

print forward

super(WrappedNavigationToolbar, self).forward(*args)

self.viewer.resetLabels()

self.draw()

 

def back(self, *args):

print back

super(WrappedNavigationToolbar, self).back(*args)

self.viewer.resetLabels()

self.draw()

 

 

.

def resetLabels(self):

xlabels = self.plotInfo.getXValues()

xticks = self.axes.get_xticks()

newticks = []

for label in xticks:

idx = int(label)

if idx =0 and idx  len(xlabels):

newticks.append(xlabels[idx])

else:

newticks.append()



self.axes.set_xticklabels(newticks)

 

From: Fiedler, Lars - 0447 - MITLL 
Sent: Thursday, August 11, 2011 6:10 PM
To: matplotlib-users@lists.sourceforge.net
Cc: Fiedler, Lars - 0447 - MITLL
Subject: How to get correct xtick labels with zooming and panning

 

Hi,

  If I create a bar graph inside a FigureCanvas, how do I get the correct x
tick labels to display when someone does a zoom with the NavigationToolbar?

 

For example, lets say I've got the below code:

self.axes.set_xticks = range(len(vals))

self.axes.set_xticklabels(xLabels)

self.axes.bar(

left=range(len(vals)), 

height=map(float, vals), 

width=.2, 

align='center', 

alpha=0.44,

picker=5)

 

If the number of values is very large, then matplotlib seems to select only
a few x labels to display (selecting far left and right, and some in the
middle), but it's choosing the first ones in the specified label array,
instead of indexing into it.  

 

I've tried setting the tick labels, based on the ticks it's selected,
(setting labels based on the ticks after the bar has been created) and that
seems to work on the initial load, but then if someone zooms into a
particular part, it doesn't update the labels to the correct range . It's
almost like I would need a callback to reset the labels .

 

Ideas?

 

Cheers,

  Lars

 

 



smime.p7s
Description: S/MIME cryptographic signature
--
uberSVN's rich system and user administration capabilities and model 
configuration take the hassle out of deploying and managing Subversion and 
the tools developers use with it. Learn more about uberSVN and get a free 
download at:  http://p.sf.net/sfu/wandisco-dev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users