basemap: AttributeError: can't set attribute ax._hold = self._tmp_hold
Bug report
Bug summary
Basemap cannot work when I update the matplotlib to the new version 3.0.1.
Code for reproduction
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
outfile = r'E:\wrong.tif'
# read in data on lat/lon grid.
# data from https://github.com/matplotlib/basemap/tree/master/examples
hgt = np.loadtxt(r'E:\tmp\basemap\500hgtdata.gz')
lons = np.loadtxt(r'E:\tmp\basemap\500hgtlons.gz')
lats = np.loadtxt(r'E:\tmp\basemap\500hgtlats.gz')
lons, lats = np.meshgrid(lons, lats)
mnh = Basemap(lon_0=-105, boundinglat=20.,
resolution='c', area_thresh=10000., projection='nplaea')
xnh, ynh = mnh(lons, lats)
CS = mnh.contour(xnh, ynh, hgt, 15, linewidths=0.5, colors='k')
CS = mnh.contourf(xnh, ynh, hgt, 15, cmap=plt.cm.Spectral)
mnh.drawcoastlines(linewidth=0.5)
delat = 30.
circles = np.arange(0., 90., delat).tolist() + \
np.arange(-delat, -90, -delat).tolist()
mnh.drawparallels(circles, labels=[1, 0, 0, 0])
delon = 45.
meridians = np.arange(0, 360, delon)
mnh.drawmeridians(meridians, labels=[1, 0, 0, 1])
plt.title('NH 500 hPa Height (cm.Spectral)')
# colorbar on bottom.
mnh.colorbar(pad='5%')
plt.savefig(outfile, dpi=300, bbox_inches='tight')
plt.show()
Actual outcome
# If applicable, paste the console output here
Traceback (most recent call last):
File "E:/MyWork/code/python/psta/tmp.py", line 20, in <module>
CS = mnh.contour(xnh, ynh, hgt, 15, linewidths=0.5, colors='k')
File "D:\Python36\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 542, in with_transform
return plotfunc(self,x,y,data,*args,**kwargs)
File "D:\Python36\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 3566, in contour
self._restore_hold(ax)
File "D:\Python36\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 3229, in _restore_hold
ax._hold = self._tmp_hold
AttributeError: can't set attribute
Expected outcome
Matplotlib version
- Operating system: Windows 10 x64
- Matplotlib version: 3.0.1
- Matplotlib backend (
print(matplotlib.get_backend())
): module://backend_interagg - Python version: 3.6.6
- Jupyter version (if applicable): None
- basemap version: 1.2.0
- PyCharm version: 2018.2.4
I install matplotlib and basemap from https://www.lfd.uci.edu/~gohlke/pythonlibs.
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 3
- Comments: 17 (9 by maintainers)
Commits related to this issue
- Install matplotlib on travis with max version 3.0.0 to avoid basemap bug See https://github.com/matplotlib/basemap/issues/435 — committed to jmozmoz/cloudmap by jmozmoz 6 years ago
I have to say that python has a bad reputation with these ill-managed packages - that is probably the shortcomings of anaconda - R studio never had these issues. I hope python will gradually die and give in to R
@WeatherGod I am so very jealous of your unfathomable patience and composure. Even simply considering to answer to something like this is rather heroic.
@jamessong I would not wish being responsible for giving customer support to you on whatever matter on my worst enemies. The problem and workaround is described very concise in the very last post (at the time of your first post) and yet you decide to come up with a post brimming with misconceptions and rude accusations towards the people that put their spare time into maintaining awesome projects like matplotlib, basemap or Anaconda (through conda-forge). I am so very, very glad I don’t understand your mindset. Please just stop using Python if you think it’s a bad thing and stop molesting people that make Python great, won’t you?
Same here and after I updated matplotlib 3.0.1 to 3.0.2, the problem was solved.
@jamessong, as I have noted, this issue is specifically the combination of matplotlib v3.0.1 and basemap v1.1.x. This is not a packaging issue. Matplotlib partly introduced a compatibility shim after a feature was removed in v3.0.0 that broke cartopy. That compatibility shim broke basemap. The matplotlib v3.0.2 fixes everything, which is why this issue is now closed.