Cartopy / Matplotlib проблема pcolormesh ошибки из - PullRequest
0 голосов
/ 01 апреля 2019

В моем коде эта строка не будет отображаться и выдает ошибки:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...