Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

axes.locator_params fails with LogLocator (and most Locator subclasses) #3658

Closed
pierre-haessig opened this issue Oct 17, 2014 · 4 comments
Closed

Comments

@pierre-haessig
Copy link
Contributor

There is a "communication" issue between the axes.locator_params and the LogLocator class:

plt_scale = 'log'
#plt_scale = 'linear'

fig, (ax1) = plt.subplots(1, 1)

ax1.set(yscale=plt_scale)

# works for linear scale, not for log:
ax1.axes.locator_params('y', nbins=5)

Result:

AttributeError                            Traceback (most recent call last)
<ipython-input-74-3492af5f93c8> in <module>()
      7
      8 # works for linear scale, not for log:
----> 9 ax1.axes.locator_params('y', nbins=5)

/home/pierre/anaconda/lib/python2.7/site-packages/matplotlib/axes.pyc in locator_params(self, axis, tight, **kwargs)
   2305             self.xaxis.get_major_locator().set_params(**kwargs)
   2306         if _y:
-> 2307             self.yaxis.get_major_locator().set_params(**kwargs)
   2308         self.autoscale_view(tight=tight, scalex=_x, scaley=_y)
   2309

AttributeError: 'LogLocator' object has no attribute 'set_params'

What I get from the traceback is that locator_params method forwards the locator attributes (in my case nbins) to the actual locator object via its set_params method. And this method is missing from LogLocator. (set_params is indeed defined in MaxNLocator https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1297)

So my question is: shouldn't all Locator subclasses have a set_params method ?

(and then, my code example could raise a different error, or maybe a warning, complaining that LogLocator makes in fact no use of an nbins parameter!)

best,
Pierre

@tacaswell tacaswell modified the milestones: v1.4.x, v1.5.x Oct 17, 2014
@tacaswell
Copy link
Member

Thanks for the bug report.

It turns out that only the MaxNLocater (and its sub-class AutoLocator) have set_params. This limitation is noted in the docstring (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.locator_params).

Would you be interested in doing this generalization? The easiest path would be to add a set_params to Locator that is a no-op + warning (so the code stops dying!) and then to add sensible implementations to each of the Locator classes.

@pierre-haessig
Copy link
Contributor Author

Interested, yes, but I don't have a proper time window for doing the work... :-(

Should this be marked with 'API consistency' and 'low hanging fruit' labels ?

@efiring
Copy link
Member

efiring commented Oct 30, 2014

Good idea. Done.

@tacaswell
Copy link
Member

Closed by #4172 / #4191

@QuLogic QuLogic modified the milestones: v1.5.0, 2.1 (next point release) Feb 16, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants