Skip to content

Commit

Permalink
Fix #35 - "bottom cannot be >= top" matplotlib error (#52)
Browse files Browse the repository at this point in the history
* Fix #35 - "bottom cannot be >= top" matplotlib error

Matplotlib emits errors like the following under specific canvas
layouts:

```console
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rqt_plot/data_plot/mat_data_plot.py", line 107, in resizeEvent
    self.figure.tight_layout()
  File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 1756, in tight_layout
    self.subplots_adjust(**kwargs)
  File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 1612, in subplots_adjust
    self.subplotpars.update(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 230, in update
    raise ValueError('bottom cannot be >= top')
ValueError: bottom cannot be >= top
```

Current patch catches and suppresses that exception.

References:
- matplotlib/matplotlib#10915
- #35

* renamed to `safe_tight_layout`, inverted logic to avoid duplicating the call

Co-authored-by: Dirk Thomas <dirk-thomas@users.noreply.github.com>
  • Loading branch information
bergercookie and dirk-thomas authored Apr 3, 2020
1 parent 677e36d commit cb7d874
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/rqt_plot/data_plot/mat_data_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,28 @@ def __init__(self, parent=None):
super(MatDataPlot.Canvas, self).__init__(Figure())
self.axes = self.figure.add_subplot(111)
self.axes.grid(True, color='gray')
self.figure.tight_layout()
self.safe_tight_layout()
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.updateGeometry()

def resizeEvent(self, event):
super(MatDataPlot.Canvas, self).resizeEvent(event)
self.figure.tight_layout()
self.safe_tight_layout()

def safe_tight_layout(self):
"""
Deal with "ValueError: bottom cannot be >= top" bug in older matplotlib versions
(before v2.2.3)
References:
- https://github.com/matplotlib/matplotlib/pull/10915
- https://github.com/ros-visualization/rqt_plot/issues/35
"""
try:
self.figure.tight_layout()
except ValueError:
if parse_version(matplotlib.__version__) >= parse_version('2.2.3'):
raise

limits_changed = Signal()

Expand Down

0 comments on commit cb7d874

Please sign in to comment.