Использование 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
,