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

pin matplotlib!=3.3.1 in requirements (plot_raster broken) #4

Closed
paxtonfitzpatrick opened this issue Sep 17, 2020 · 2 comments
Closed

Comments

@paxtonfitzpatrick
Copy link

re: openjournals/joss-reviews#2669

The plot_raster() function fails with matplotlib==3.3.1 installed due to a bug that affects seaborn's hue kwarg. I played around with a few different matplotlib versions and verified it only exists in 3.3.1 (i.e., 3.3.0 and 3.3.2 are both fine), so simply excluding that specific version in both the install_requires and requirements.txt should be fine.

Minimal code to reproduce
import matplotlib as mpl
from psifr import fr

print(f'matplotlib version: {mpl.__version__}')

df = fr.sample_data('Morton2013')
data = fr.merge_free_recall(df)
subj = fr.filter_data(data, subjects=1)
fr.plot_raster(subj)
Output & traceback
matplotlib version: 3.3.1

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/IPython/core/formatters.py in __call__(self, obj)
    339                 pass
    340             else:
--> 341                 return printer(obj)
    342             # Finally look for special method names
    343             method = get_real_method(obj, self.print_method)

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/IPython/core/pylabtools.py in <lambda>(fig)
    246 
    247     if 'png' in formats:
--> 248         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
    249     if 'retina' in formats or 'png2x' in formats:
    250         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/IPython/core/pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
    130         FigureCanvasBase(fig)
    131 
--> 132     fig.canvas.print_figure(bytes_io, **kw)
    133     data = bytes_io.getvalue()
    134     if fmt == 'svg':

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
   2191                            else suppress())
   2192                     with ctx:
-> 2193                         self.figure.draw(renderer)
   2194 
   2195                     bbox_inches = self.figure.get_tightbbox(

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     39                 renderer.start_filter()
     40 
---> 41             return draw(artist, renderer, *args, **kwargs)
     42         finally:
     43             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/figure.py in draw(self, renderer)
   1861 
   1862             self.patch.draw(renderer)
-> 1863             mimage._draw_list_compositing_images(
   1864                 renderer, self, artists, self.suppressComposite)
   1865 

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    129     if not_composite or not has_images:
    130         for a in artists:
--> 131             a.draw(renderer)
    132     else:
    133         # Composite any adjacent images together

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     39                 renderer.start_filter()
     40 
---> 41             return draw(artist, renderer, *args, **kwargs)
     42         finally:
     43             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/cbook/deprecation.py in wrapper(*inner_args, **inner_kwargs)
    409                          else deprecation_addendum,
    410                 **kwargs)
--> 411         return func(*inner_args, **inner_kwargs)
    412 
    413     return wrapper

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
   2746             renderer.stop_rasterizing()
   2747 
-> 2748         mimage._draw_list_compositing_images(renderer, self, artists)
   2749 
   2750         renderer.close_group('axes')

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    129     if not_composite or not has_images:
    130         for a in artists:
--> 131             a.draw(renderer)
    132     else:
    133         # Composite any adjacent images together

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     39                 renderer.start_filter()
     40 
---> 41             return draw(artist, renderer, *args, **kwargs)
     42         finally:
     43             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/collections.py in draw(self, renderer)
    929     def draw(self, renderer):
    930         self.set_sizes(self._sizes, self.figure.dpi)
--> 931         Collection.draw(self, renderer)
    932 
    933 

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     39                 renderer.start_filter()
     40 
---> 41             return draw(artist, renderer, *args, **kwargs)
     42         finally:
     43             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/collections.py in draw(self, renderer)
    383             else:
    384                 combined_transform = transform
--> 385             extents = paths[0].get_extents(combined_transform)
    386             if (extents.width < self.figure.bbox.width
    387                     and extents.height < self.figure.bbox.height):

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/matplotlib/path.py in get_extents(self, transform, **kwargs)
    601                 xys.append(curve([0, *dzeros, 1]))
    602             xys = np.concatenate(xys)
--> 603         return Bbox([xys.min(axis=0), xys.max(axis=0)])
    604 
    605     def intersects_path(self, other, filled=True):

~/opt/anaconda3/envs/psifr-review/lib/python3.8/site-packages/numpy/core/_methods.py in _amin(a, axis, out, keepdims, initial, where)
     41 def _amin(a, axis=None, out=None, keepdims=False,
     42           initial=_NoValue, where=True):
---> 43     return umr_minimum(a, axis, None, out, keepdims, initial, where)
     44 
     45 def _sum(a, axis=None, dtype=None, out=None, keepdims=False,

ValueError: zero-size array to reduction operation minimum which has no identity

@paxtonfitzpatrick
Copy link
Author

it'd also probably be worth pinning minimum versions of other packages whose APIs have had non-trivial changes lately (pandas>=1.0.0, seaborn>=0.9.1, etc.)

@mortonne
Copy link
Owner

Good catch! I've pinned the versions you mentioned.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants