Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Closed
Description
Bug summary
With mpl <3.7 this code works the code snippet below works but it is broken in 3.7.0 and 3.7.1. The odd thing is that if I move the colorbar to the last line or if I don't use pandas to the theC
plotting it works just fine. I guess there is a bad interaction somewhere that is messing up with the subplots.
Code for reproduction
importmatplotlib.pyplotaspltimportpandasaspdfig=plt.figure()axes=fig.subplot_mosaic(""" AB CC """)x= [1,2,3]y= [1,2,3]cs0=axes["A"].scatter(x,y)cs1=axes["B"].scatter(x,y)fig.colorbar(cs0,ax=[axes["A"],axes["B"]],location="right")axes["C"].plot(x)pd.DataFrame(x).plot(ax=axes["C"])
Actual outcome
AttributeError Traceback (most recent call last)Cell In[10], line 21 19 fig.colorbar(cs0, ax=[axes["A"], axes["B"]], location="right") 20 axes["C"].plot(x)---> 21 pd.DataFrame(x).plot(ax=axes["C"]) 22 # fig.colorbar(cs0, ax=[axes["A"], axes["B"]], location="right")File ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_core.py:1000, in PlotAccessor.__call__(self, *args, **kwargs) 997 label_name = label_kw or data.columns 998 data.columns = label_name-> 1000 return plot_backend.plot(data, kind=kind, **kwargs)File ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_matplotlib/__init__.py:71, in plot(data, kind, **kwargs) 69 kwargs["ax"] = getattr(ax, "left_ax", ax) 70 plot_obj = PLOT_CLASSES[kind](data, **kwargs)---> 71 plot_obj.generate() 72 plot_obj.draw() 73 return plot_obj.resultFile ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_matplotlib/core.py:455, in MPLPlot.generate(self) 453 self._add_table() 454 self._make_legend()--> 455 self._adorn_subplots() 457 for ax in self.axes: 458 self._post_plot_logic_common(ax, self.data)File ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_matplotlib/core.py:679, in MPLPlot._adorn_subplots(self) 677 all_axes = self._get_subplots() 678 nrows, ncols = self._get_axes_layout()--> 679 handle_shared_axes( 680 axarr=all_axes, 681 nplots=len(all_axes), 682 naxes=nrows * ncols, 683 nrows=nrows, 684 ncols=ncols, 685 sharex=self.sharex, 686 sharey=self.sharey, 687 ) 689 for ax in self.axes: 690 ax = getattr(ax, "right_ax", ax)File ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_matplotlib/tools.py:410, in handle_shared_axes(axarr, nplots, naxes, nrows, ncols, sharex, sharey) 408 layout = np.zeros((nrows + 1, ncols + 1), dtype=np.bool_) 409 for ax in axarr:--> 410 layout[row_num(ax), col_num(ax)] = ax.get_visible() 412 for ax in axarr: 413 # only the last row of subplots should get x labels -> all 414 # other off layout handles the case that the subplot is 415 # the last in the column, because below is no subplot/gap. 416 if not layout[row_num(ax) + 1, col_num(ax)]:File ~/micromamba/envs/TEST/lib/python3.11/site-packages/pandas/plotting/_matplotlib/tools.py:396, in handle_shared_axes.<locals>.<lambda>(x) 386 def handle_shared_axes( 387 axarr: Iterable[Axes], 388 nplots: int, (...) 393 sharey: bool, 394 ): 395 if nplots > 1:--> 396 row_num = lambda x: x.get_subplotspec().rowspan.start 397 col_num = lambda x: x.get_subplotspec().colspan.start 399 if compat.mpl_ge_3_4_0():AttributeError: 'NoneType' object has no attribute 'rowspan'
Expected outcome
Additional information
No response
Operating system
No response
Matplotlib Version
3.7.0 and 3.7.1
Matplotlib Backend
module://matplotlib_inline.backend_inline
Python version
3.11
Jupyter version
6.5.3
Installation
conda