无法使用Matplotlib将Cartopy生成的图形保存到pdf文件中

问题描述 投票:1回答:1

我正在使用Cartopy在经/纬网格上生成一堆图(从Matplotlib的底图进行升级),即使该图没有引发任何错误,当我尝试将图保存到多个图时,我的代码也会失败使用Matplotlib的matplotlib.backends.backend_pdf.PdfPages的页面PDF文件。

以下是代码的相关部分:

import cartopy
import cartopy.crs as ccrs
from matplotlib import colorbar, cm, pyplot
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib.font_manager import FontProperties

(fig, axis) = pyplot.subplots(nrows=1, ncols=1, subplot_kw={"projection": ccrs.PlateCarree()})

fout = PdfPages("Junk.pdf")
fout.savefig(fig)

我已验证fig的类型为matplotlib.figure.Figure

我得到的错误是:

File "./plot_cfba.py", line 326, in <module>
    fout_tmp.savefig(fig[0])
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/backends/backend_pdf.py", line 2445, in savefig
    figure.savefig(self, format="pdf", **kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/figure.py", line 2180, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 2089, in print_figure
    **kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/backends/backend_pdf.py", line 2503, in print_pdf
    self.figure.draw(renderer)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/figure.py", line 1709, in draw
    renderer, self, artists, self.suppressComposite)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/data/science_TC/kmueller/miniconda3/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py", line 372, in draw
    gl._draw_gridliner(background_patch=self.background_patch)
  File "/data/science_TC/kmueller/miniconda3/lib/python3.6/site-packages/cartopy/mpl/gridliner.py", line 338, in _draw_gridliner
    x_lc = mcollections.LineCollection(lines, **collection_kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/collections.py", line 1331, in __init__
    **kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/collections.py", line 162, in __init__
    self.update(kwargs)
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/artist.py", line 974, in update
    ret = [_update_property(self, k, v) for k, v in props.items()]
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/artist.py", line 974, in <listcomp>
    ret = [_update_property(self, k, v) for k, v in props.items()]
  File "/data/science_TC/kmueller/toolkit/python/3.6.9/lib/python3.6/site-packages/matplotlib/artist.py", line 970, in _update_property
    .format(type(self).__name__, k))
AttributeError: 'LineCollection' object has no property 'xloc'

我正在使用matplotlib版本3.1.2,Cartopy 0.17.0和python 3.6.9。

这些版本的Matplotlib和Cartopy是否不匹配?我需要升级其中一个以匹配另一个吗?

此代码曾经可以正常工作,但是现在我正在使用Cartopy制作地图,但问题已经解决了。

python matplotlib cartopy
1个回答
0
投票

事实证明,问题完全是我自己造成的。 “ axis.gridlines”调用应传递“ xlocs”和“ ylocs”,而不是“ xloc”和“ yloc”。

© www.soinside.com 2019 - 2024. All rights reserved.