В моем коде эта строка не будет отображаться и выдает ошибки:
plot_obs = current_ax.pcolormesh(lons, lats, averagedData[pos, ...], transform=projection, cmap=color_map, norm=norm, vmin=vmin, vmax=vmax)
Цель здесь - построить 8 панелей метеорологических данных от 45N до 45S по всему земному шару. AveragedData - это массив 8x91x360, и я проверил аргументы, чтобы убедиться, что они имеют правильные данные и типы. Этот код работал раньше, но на этой конкретной комбинации numpy (1.15.4), matplotlib (2.0.0) и cartopy (0.16.0) я получаю эту ошибку (также python 3.6.0):
Traceback (последний вызов был последним):
Файл "plot_map.py", строка 386, в
plot_obs = current_ax.pcolormesh (lons, lats, averagedData [pos, ...], transform = проекция, cmap = color_map, norm = норма, vmin = vmin,
Vmax = Vmax)
Файл "/home/havenerk/.edm/envs/mjopy/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py", строка 1451, в pcolormesh
result = self._pcolormesh_patched (* args, ** kwargs)
Файл "/home/havenerk/.edm/envs/mjopy/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py", строка 1488, в _pcolormesh_patched
corres = 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 ( Границы , ncolors ). Согласно документации Границы должны представлять собой монотонно возрастающую последовательность целых чисел, которая в этом случае представляет собой массив целых чисел [-6, -5, -4, -3, -2 , -1, 1, 2, 3, 4, 5, 6]. Эта последовательность соответствует правильно окрашенной цветной полосе в легенде. Очевидно, что matplotlib не может сортировать данные по цвету. Я думаю, что могу вычеркнуть из уравнения картопия и numpy и сосредоточиться на matplotlib.