Проблема с tight_layout с matplotlib и cartopy

Oct 14 2020

Я недавно перешел на Matplotlib 3.3.1, и мой старый скрипт начал жаловаться. Я думаю, это проблема с картографией. Вот минимальный воспроизводимый пример

import cartopy.crs as ccrs    
fig, ax = plt.subplots(2, 2,
                       subplot_kw=dict(projection=ccrs.PlateCarree()),
                      figsize=[12,7], sharex=True, sharey=True)
plt.tight_layout()

Есть предложения по исправлению этой проблемы?

Здесь я копирую сообщение об ошибке:

Отслеживание (последний вызов последний):

Файл "", строка 4, в plt.tight_layout ()

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ cbook \ deprecation.py", строка 451, в оболочке return func (* args, ** kwargs)

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ pyplot.py", строка 1490, в tight_layout gcf (). Tight_layout (pad = pad, h_pad = h_pad, w_pad = w_pad, rect = rect )

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ cbook \ deprecation.py", строка 411, в оболочке return func (* inner_args, ** inner_kwargs)

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ figure.py", строка 2613, в tight_layout kwargs = get_tight_layout_figure (

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ tight_layout.py", строка 303, в get_tight_layout_figure kwargs = auto_adjust_subplotpars (fig, renderer,

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ tight_layout.py", строка 84, в auto_adjust_subplotpars bb + = [ax.get_tightbbox (renderer, for_layout_only = True)]

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ axes_base.py", строка 4203, в get_tightbbox bbox = a.get_tightbbox (средство визуализации)

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ artist.py", строка 278, в get_tightbbox bbox = self.get_window_extent (средство визуализации)

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ patches.py", строка 598, в get_window_extent return self.get_path (). Get_extents (self.get_transform ())

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ matplotlib \ path.py", строка 603, в get_extents возвращает Bbox ([xys.min (axis = 0), xys.max (axis = 0) ])

Файл "C: \ Users \ Vinod \ anaconda3 \ lib \ site-packages \ numpy \ core_methods.py", строка 43, в _amin return umr_minimum (a, axis, None, out, keepdims, initial, where)

ValueError: массив нулевого размера до минимума операции сокращения, который не имеет идентификатора

Ответы

1 jwalton Oct 14 2020 at 21:07

Это была известная проблема, и ее устраняли в: https://github.com/SciTools/cartopy/issues/1207. (Если у вас установлена ​​последняя версия cartopy, это может решить эту проблему).

Между тем, в качестве обходного пути было отмечено, что вы можете позвонить на номер fig.canvas.draw()до того, как позвонить plt.tight_layout().