Во-первых, я бы посоветовал вам начать использовать pcolormesh, а не imshow. Pcolormesh должен быть вашим инструментом визуализации при попытке отобразить данные с координатной сеткой в прямоугольниках (как contourf при рисовании данных с координатной сеткой в виде областей с одинаковыми значениями).
Чтобы использовать pcolormesh, вы должны передать координаты x и y углов ваших данных, поэтому:
x = np.linspace(-180, 180, 182)
y = np.linspace(-90, 90, 84)
m.pcolormesh(x, y, data)
Но с помощью базовой карты вы всегда должны преобразовывать координаты в систему координат карты - в конечном итоге это может означать, что координаты x и y должны быть двухмерными массивами, поэтому мы делаем это и конвертируем:
x = np.linspace(-180, 180, 182)
y = np.linspace(-90, 90, 84)
x, y = np.meshgrid(x, y)
converted_x, converted_y = m(x, y)
m.pcolormesh(converted_x, converted_y, data)
Это означает, что теперь вы можете изменить прогноз, и ваши данные будут отображены в нужном месте. Например, я изменил проекцию на «Робин» (Робинсон) и получил следующую картинку:
![Результат моего исправления](https://i.stack.imgur.com/3Gxiy.png)
К сожалению, pcolormesh предназначен для смежных блоков данных, которые, если вы выберете проекцию, которая не имеет одинаковой центральной долготы (также известной как «lon_0»), вы получите плохие результаты. Например, я изменил проекцию на projection='robin',lon_0=180
и получил следующее изображение:
![Плохая строка даты](https://i.stack.imgur.com/1oqGc.png)
Это потому, что шкала дат в настоящее время не обрабатывается Basemap, и, насколько я могу судить, без серьезной перезаписи - никогда не будет.
Хорошая новость заключается в том, что эта область беспокоила меня в течение долгого времени, поэтому я начал писать новый пакет, чтобы справиться с этой и многими другими причудами картографии для научной визуализации. В результате получился новый пакет под названием cartopy, который выполняет гораздо больше работы за вас, так что такие вещи, как строка даты, «просто работают»:
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
x = np.linspace(-180, 180, 182)
y = np.linspace(-90, 90, 84)
measurement_grid = np.random.random_sample((83, 181)) * y[:-1, np.newaxis] ** 2
plt.axes(projection=ccrs.Robinson(central_longitude=180))
plt.pcolormesh(x, y, measurement_grid, transform=ccrs.PlateCarree())
plt.gca().coastlines()
plt.show()
![Картография](https://i.stack.imgur.com/F2TVN.png)
Хотя я не предлагаю вам перейти на cartopy сейчас (установка и производительность все еще в процессе), но стоит знать, что пакет существует, и я ожидаю, что в будущем он станет все более и более привлекательным, когда вы столкнетесь с такими видами. вопросов. http://scitools.org.uk/cartopy/docs/latest
Также стоит отметить, что многие проблемы, возникающие при научной визуализации данных с координатной привязкой, связаны с обработкой данных, их координатами и лежащими в их основе системами координат, поэтому был написан другой пакет, который реализует модель данных для инкапсуляции всех данных. из этой сложной информации в единый объект, который затем может быть передан подпрограммам построения графиков для простого взаимодействия. Я снова рекомендую вам взглянуть на него http://scitools.org.uk/iris/docs/latest.
HTH
person
pelson
schedule
15.08.2013
measurementgrid
(он также не показываетimport numpy as np
, но мне удалось это угадать! - person Steve Barnes   schedule 12.08.2013