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

ScalarFormatter throws math domain errors with polar curvilinear grid examples #4761

Closed
benjaminsteele opened this issue Jul 23, 2015 · 3 comments
Assignees
Milestone

Comments

@benjaminsteele
Copy link

Curvelinear grids sometimes create axes that contain only two ticks, each of equal value. In these cases, ScalarFormatter's _set_format method will throw a math domain error when it tries to calculate the logarithm of their difference.

As the default tick formatter is mpl_toolkits.axisartist.grid_finder.FormatterPrettyPrint and that formatter uses ScalarFormatter, any curvelinear graph that doesn't specify an alternative formatter has the potential to run into this issue. This includes all polar curvelinear examples.

demo_floating_axis.py throws the error if the plot is panned to create condition noted above, or if line 58 is changed to ax1.set_ylim(-5, 5)

Traceback (most recent call last):
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\backends\backend_qt5.py", line 338, in resizeEvent
    self.draw()
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\backends\backend_agg.py", line 469, in draw
    self.figure.draw(self.renderer)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\figure.py", line 1085, in draw
    func(*args)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axes_grid1\parasite_axes.py", line 295, in draw
    self._get_base_axes_attr("draw")(self, renderer)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\axislines.py", line 778, in draw
    super(Axes, self).draw(renderer, inframe)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\axes\_base.py", line 2110, in draw
    a.draw(renderer)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\axis_artist.py", line 914, in draw
    self._grid_helper.update_lim(self.axes)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\axislines.py", line 428, in update_lim
    self._update(x1, x2, y1, y2)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\grid_helper_curvelinear.py", line 376, in _update
    self._update_grid(x1, y1, x2, y2)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\grid_helper_curvelinear.py", line 439, in _update_grid
    self.grid_info = self.grid_finder.get_grid_info(x1, y1, x2, y2)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\grid_finder.py", line 136, in get_grid_info
    lat_factor, levs)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\mpl_toolkits\axisartist\grid_finder.py", line 317, in __call__
    self._fmt.set_locs(values)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\ticker.py", line 523, in set_locs
    self._set_format(vmin, vmax)
  File "C:\ProgramData\WinPython-64bit-2.7.10.1\python-2.7.10.amd64\lib\site-packages\matplotlib\ticker.py", line 584, in _set_format
    loc_range_oom = int(math.floor(math.log10(loc_range)))
ValueError: math domain error
@tacaswell tacaswell added this to the proposed next point release milestone Jul 23, 2015
@flomertens
Copy link

The issue was introduced in bdb53a1
Before this, it was working fine.

@flomertens
Copy link

Actually d026762 (one commit earlier) which was commited to fix issue 617

@mdboom
Copy link
Member

mdboom commented Aug 24, 2015

Cc: @efiring

@efiring efiring self-assigned this Aug 25, 2015
tacaswell added a commit that referenced this issue Aug 26, 2015
BUG: in ScalarFormatter, handle two identical locations

closes #4761
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

5 participants