данные точечной диаграммы не отображаются на континентах в базовой карте «молот»

Я пытаюсь построить набор данных по базовой карте «молоток», используя точечную диаграмму. Однако точки данных не будут нанесены поверх континентов. Я заметил, что в matplotlib примере тоже нет данных по континентам (это я предполагал было связано с характером примера). Мне интересно, делаю ли я что-то не так, или данные не могут быть нанесены на вершину континентов с помощью «молотка» по дизайну.

Если это так, существует ли идеальная базовая карта, которую можно использовать для построения диаграммы рассеяния по всей Земле (использование карты рельефа было бы здорово, но я бы согласился на что угодно на данный момент)?


person WillaB    schedule 12.04.2015    source источник


Ответы (1)


Вероятно, вам не хватает ключевого слова для интерпретации данных широты и долготы как таковых. Из справки для Basemap.scatter:

Если для ключевого слова latlon задано значение True, x,y интерпретируются как долгота и широта в градусах. Данные и долготы автоматически смещаются в соответствии с областью картографической проекции для цилиндрических и псевдоцилиндрических проекций, а x,y преобразуются в координаты картографической проекции. Если latlon равно False (по умолчанию), x и y считаются координатами картографической проекции.

Мне также нужно было увеличить z-порядок, чтобы получить разброс поверх континентов, а также океанов.

import time, calendar, datetime, numpy
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# draw map with markers for float locations
m = Basemap(projection='hammer',lon_0=180)
m.drawmapboundary(fill_color='#99ffff')
m.fillcontinents(color='#cc9966',lake_color='#99ffff')

m.scatter([-73.98, 238., 0.08, 0., 116.38],[40.78,47.6,  51.53,0., 39.91],
          latlon=True, # Ta-da!
          marker='o',color='k',
          zorder=10)

plt.title('Hammer projection, data on top',fontsize=12)
plt.show()

введите здесь описание изображения

person cphlewis    schedule 13.04.2015
comment
Это было здорово, спасибо! Я уже устанавливал данные о широте, используя x, y = m(lons,lats). Чего мне не хватало, так это zorder=10. Хотя приятно знать, что вместо этого я могу использовать latlon=True в scatter. - person WillaB; 13.04.2015
comment
Мне повезло, я выбрал прибрежный город в качестве теста и мог видеть половину маркера — было очевидно, что он находится под континентом, а не под океаном. - person cphlewis; 13.04.2015