Я задал еще один вопрос

смягчить проблемуописано здесьЯ пытаюсь нарисоватьpcolor Участок в двух бесплатных частях. у меня естьX а такжеY данные, которые соответствуют долготе и широте соответственно (в действительности это переводится в координаты проекции какcartopy, но проблема под рукой не зависит от этого). Долгота может обернуться вокруг антимеридиана, что приведет к тому, что четырехугольники будут нарисованы по всему земному шару. Чтобы предотвратить это, я пытаюсь нарисовать две части по отдельности, как показано ниже:

#!/usr/bin/env python3.6

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

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(lons, lats, ma.masked_where(lons>0, bts))
savefig("/tmp/ok.png")

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

Теперь график, где я маскирую все положительные долготы, выглядит более или менее так, как я ожидаю:

но заговор, где я маскирую все отрицательные долготы, все еще строит четырехугольники по всем осям:

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

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

Решение Вопроса

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

from numpy import array, ma
import matplotlib.pyplot as plt

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]])

fig, (ax,ax2) = plt.subplots(ncols=2)
ax.pcolor(ma.masked_where(lons>0, lons), 
       ma.masked_where(lons>0, lats), 
       ma.masked_where(lons>0, bts))

ax2.pcolor(ma.masked_where(lons<0, lons), 
       ma.masked_where(lons<0, lats), 
       ma.masked_where(lons<0, bts))

plt.show()

 gerrit03 окт. 2017 г., 17:19
Отлично. К сожалению, это, похоже, снова не сработало в проекции координат картыЯ задал еще один вопрос.

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