在我的代码中,此行将不会绘制并显示错误:
plot_obs = current_ax.pcolormesh(lons, lats, averagedData[pos, ...], transform=projection, cmap=color_map, norm=norm, vmin=vmin, vmax=vmax)
此处的目的是在全球绘制从45N到45S的8个气象数据面板。 averagedData是一个8x91x360的数组,我已经检查了参数以确保它们具有正确的数据和类型。这段代码以前已经起作用了,但是在numpy(1.15.4),matplotlib(2.0.0)和cartopy(0.16.0)的这种特殊组合上,我得到了这个错误(也是python 3.6.0):
回溯(最近通话最近): 文件“ plot_map.py”,行386,在 plot_obs = current_ax.pcolormesh(lons,lats,averagedData [pos,...],transform = projection,cmap = color_map,norm = norm,vmin = vmin, vmax = vmax) pcolormesh中的文件“ /home/havenerk/.edm/envs/mjopy/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py”,行1451 结果= self._pcolormesh_patched(* args,** kwargs) 文件“ /home/havenerk/.edm/envs/mjopy/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py”,行1488,在_pcolormesh_patched中 坐标= np.column_stack((X.flat,Y.flat))。astype(float,copy = False) ValueError:设置具有序列的数组元素。
如果我注释掉这一行,程序将正确覆盖其他四个使用current_ax.contour而不是current_ax.pcolormesh的网格化数据集。换句话说,地图中的每个元素(除averagedData数组之外)都将正确绘制。因此,问题很可能包含在pcolormesh / cartopy交互中。任何想法在这里发生了什么?我没有按我可以告诉的顺序进行传递,而且似乎找不到任何表明模块版本不匹配的文档。这行是一个相当复杂的程序的一部分,并且我还没有能够隔离出一个引发该错误的最小程序。我会接受您的任何建议。
编辑:我现在只是在对pcolormesh的调用链中找到一个序列。具体来说,在上面的代码行中,参数norm = norm将追溯到matplotlib.colors.BoundaryNorm( boundaries , ncolors )。根据文档, boundaries 应该是一个单调递增的整数序列,在这种情况下,它是整数[-6,-5,-4,-3, -2,-1、1、2、3、4、5、6]。此序列确实与图例中正确着色的颜色条匹配。显然matplotlib无法按颜色对数据进行分箱。我想我可以从等式中排除掉cartopy和numpy并专注于matplotlib。