Использование pcolormesh для построения данных орбиты

Я пытаюсь сопоставить набор данных с соответствующими широтой и долготой. Детали данных, которые я использую, приведены ниже:

Variable   Type       Data/Info
-------------------------------
lat    ndarray    1826x960, type `float64`
lon    ndarray    1826x960, type `float64`
data   ndarray    1826x960, type `float64`

Я создал тогда базовую карту:

m = Basemap(projection='cyl', llcrnrlon=-180, urcrnrlon=180, llcrnrlat=-40, urcrnrlat=40, resolution='c')

Теперь на созданной базовой карте я нанесу на карту вышеупомянутый набор данных, используя pcolormesh:

m.drawcoastlines()
m.drawcountries
x,y = m(lon,lat)
m.pcolormesh(x,y,data)
m.colorbar()
plt.show()

Это дает следующий рисунок: Темп Яркость графика

Но если я выполняю аналогичный график для набора данных (размер 2691x960, то же самое относится к lon и lat), охватывающего все отрезки долготы (от -180 до 180), я получаю "странный бар": странный бар

Я почти уверен, что странная полоса возникает из-за перекрытия набора данных. Тот же сюжет был выполнен в Matlab, и он работает довольно хорошо.

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

2 ответа

Я думаю, что вы столкнулись с проблемой, с которой я столкнулся немного назад. Проблема здесь в том, что, когда базовая карта пытается создать полигоны, она использует метод интерполяции, который, по-видимому, не обрабатывает основной меридиан правильно. Пиксели, которые фактически пересекают главный меридиан, интерполируются в многоугольник, который простирается по всему земному шару.

Решение, которое я использовал, состоит в том, чтобы разделить файл на два замаскированных массива (или просто замаскировать исходный массив двумя разными способами в разное время), один с замаскированным восточным полушарием, а другой с замаскированным западным полушарием, а затем сопоставить их оба с тот же объект оси.

изменить: другое решение может быть, чтобы ваши границы долготы перейти от -179,99 до 179,99 или что-то подобное.

Я не работал ни с чем, чтобы решить эту проблему, но похоже, что решение похожей проблемы звучания было предложено здесь с использованием метода mpl_toolkit.basemap.addcyclic.

Из документов:

arrout, lonsout = addcyclic(arrin, lonsin) добавляет циклическую (циклическую) точку по долготе к arrin а также lonsin, предполагает, что долгота является самым правым измерением arrin,

Другие вопросы по тегам