Помимо вышесказанного, может быть, стоит отметить, что сетка должна быть отсортирована по возрастанию, что здесь не так, и это может вызвать общую проблему.

ополнительный вопрос кпредотвращение паразитных горизонтальных линий для неокрашенных данных pcolor (mesh) а такжепочему pcolor с замаскированным массивом все еще заполняет четырехугольники, соединяющиеся с замаскированными точками, и как мне это остановить?, В обычных координатах, когда я маскирую и координаты, и данные, я могу нанести pcolor для координат, которые обертываются, например, долготы, на две части, и теперь мне не удается получить нежелательные четырехугольники в обычных координатах. Однако, когда я преобразую его в координаты карты, это решение не работает:

#!/usr/bin/env python3.6

from numpy import array, ma
from matplotlib.pyplot import figure, pcolor, savefig, axes

lons = array([[ 100.,  120.,  140.,  160.,  180.],
       [ 120.,  140.,  160.,  180., -160.],
       [ 140.,  160.,  180., -160., -140.],
       [ 160.,  180., -160., -140., -120.],
       [ 180., -160., -140., -120., -100.],
       [-160., -140., -120., -100.,  -80.]])

lats = array([[  0.,  10.,  20.,  30.,  40.],
       [  0.,  10.,  20.,  30.,  40.],
       [  0.,  10.,  20.,  30.,  40.],
       [  0.,  10.,  20.,  30.,  40.],
       [  0.,  10.,  20.,  30.,  40.],
       [  0.,  10.,  20.,  30.,  40.]])

bts = array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29]])

figure()
pcolor(ma.masked_where(lons>0, lons), ma.masked_where(lons>0, lats), bts)
pcolor(ma.masked_where(lons<0, lons), ma.masked_where(lons<0, lats), bts)
savefig("/tmp/ok.png")

# now with cartopy
import cartopy.crs as ccrs
proj = ccrs.Mollweide(central_longitude=0)
trans = proj.transform_points(ccrs.Geodetic(), lons, lats)
figure()
ax = axes(projection=proj)
ax.pcolormesh(ma.masked_where(lons>0, trans[:, :, 0]), ma.masked_where(lons>0, trans[:, :, 1]), ma.masked_where(lons>0, bts), transform=proj)
ax.pcolormesh(ma.masked_where(lons<0, trans[:, :, 0]), ma.masked_where(lons<0, trans[:, :, 1]), ma.masked_where(lons<0, bts), transform=proj)
savefig("/tmp/not_ok.png")

В обычных координатах по желанию:

В координатах карты вернулись нежелательные четырехугольники:

Обратите внимание, что любая положительная долгота отображается на любую положительную координату карты и наоборот, потому что центральная долгота для текущей проекции равна нулю. Когда я дополнительно маскирую долготы, равные ± 180, я все равно получаю ту же ситуацию. Так что проблема кроется в другом. Как я могу построитьpcolor в двух частях в то время как в проекции координат карты?

Ответы на вопрос(1)

что код, предназначенный для обхода этого, заключает в себе координаты вокруг границ проекции, которая была введена в картографию в соответствии сЭта проблема на самом деле не работает хорошо / вообще (?). Этот код пытается аналогичным образом маскировать разные регионы, но каким-то образом не дает желаемого результата.

Теперь, с другой стороны, вопрос об облицовке граней вокруг планеты в любом случае присутствует только вpcolormesh, не вpcolor; вероятно, из-за разного использования сетки в обоих случаях.
Поэтому при использованииpcolor сюжет выглядит как хотелось бы.

import cartopy.crs as ccrs
proj = ccrs.Mollweide(central_longitude=0)
trans = proj.transform_points(ccrs.Geodetic(), lons, lats)
plt.figure()
ax = plt.axes(projection=proj)
ax.pcolor(ma.masked_where(trans[:, :, 0]>0, trans[:, :, 0]), ma.masked_where(trans[:, :, 0]>0, trans[:, :, 1]), ma.masked_where(trans[:, :, 0]>0, bts), transform=proj)
ax.pcolor(ma.masked_where(trans[:, :, 0]<0, trans[:, :, 0]), ma.masked_where(trans[:, :, 0]<0, trans[:, :, 1]), ma.masked_where(trans[:, :, 0]<0, bts), transform=proj)

plt.show()

 ImportanceOfBeingErnest03 окт. 2017 г., 18:17
Помимо вышесказанного, может быть, стоит отметить, что сетка должна быть отсортирована по возрастанию, что здесь не так, и это может вызвать общую проблему.

Ваш ответ на вопрос