Этот вопрос относится к построению некоторых данных, которые используются с использованием CRMS Lambert Conformal (LCC). Хотя эти вопросы конкретно относятся к построению данных LCC в нескольких проекциях, это также относится к использованию картографии в целом, поскольку я хотел бы лучше понять логику/процесс построения графика с использованием картографии.Построение прогнозируемых данных в других проекторах с использованием картографии
Ниже приведены некоторые примеры того, что я пытаюсь сделать. Первый пример - просто построение некоторых данных LCC. Данные, которые я использовал, доступны по ссылке here.
import cartopy.crs as ccrs
import cartopy.feature as cf
import matplotlib.pyplot as plt
import numpy as np
proj = ccrs.LambertConformal(central_latitude = 25,
central_longitude = 265,
standard_parallels = (25, 25))
# Data and coordinates (from download link above)
with np.load('nam_218_20120414_1200_006.npz') as nam:
dat = nam['dpc']
lat = nam['lat']
lon = nam['lon']
ax = plt.axes(projection = proj)
ax.pcolormesh(lon, lat, dat, transform = ccrs.PlateCarree())
ax.add_feature(cf.NaturalEarthFeature(
category='cultural',
name='admin_1_states_provinces_lines',
scale='50m',
facecolor='none'))
ax.coastlines('50m')
ax.add_feature(cf.BORDERS)
plt.show()
Участок производства можно увидеть здесь:
США точка росы на LCC Карта
Моя первая путаница при использовании cartopy почему я всегда трансформироваться в PlateCarree
при построении графика? Моей начальной мыслью было ключевое слово transform
вызова pcolormesh
, которому требовалась информация о проекции LCC, а не PlateCarree
.
Далее, если я хочу построить данные LCC в другой проекции, например, Ортографический, я бы сделал так, как показано ниже?
# First, transform from LCC to Orthographic
transform = proj.transform_points(ccrs.Orthographic(265,25), lon, lat)
x = transform[..., 0]
y = transform[..., 1]
ax = plt.axes(projection = ccrs.Orthographic(265,25))
ax.pcolormesh(x, y, dat, transform = ccrs.PlateCarree())
ax.add_feature(cf.NaturalEarthFeature(
category='cultural',
name='admin_1_states_provinces_lines',
scale='50m',
facecolor='none'))
ax.coastlines('50m')
ax.add_feature(cf.BORDERS)
ax.set_global()
Участок производства можно увидеть здесь:
США на Ортографическую точка росы Карта
Я думаю, что карта Orthographic выглядит хорошо, но я хотел бы быть что я правильно понимаю процесс повторной проекции с картографией.
В заключение, я хотел бы знать следующие вещи:
- Вы всегда должны
transform
кPlateCarree
при печати? Почему или почему нет? - Требуется ли повторное проецирование только для вызова метода
transform_points
или существуют другие шаги?
Update 1
На основании ответа от @swatchai, кажется, что ответ на мой вопрос 2 является то, что transform_points
не требуется. Можно просто использовать аргумент ключевого слова transform
во многих методах построения matplotlib. Это то, что я думал изначально. Однако пропущение transform_points
не сработало для меня.Смотрите пример ниже:
ax = plt.axes(projection = ccrs.Orthographic(265,25))
ax.pcolormesh(lon, lat, dat, transform = proj)
ax.add_feature(cf.NaturalEarthFeature(
category='cultural',
name='admin_1_states_provinces_lines',
scale='50m',
facecolor='none'))
ax.coastlines('50m')
ax.add_feature(cf.BORDERS)
ax.set_global()
который производит этот сюжет:
Orthographic Участок Без transform_points Шаг
Проблема, кажется, что широта и долгота вход не получить преобразуются в координаты сетки, поэтому они отображаются только в чрезвычайно малой области графика. Итак, чтобы расширить вопрос 2, если вы должны пропустить transform_points
, есть ли ошибка в методах построения картографии, основанных на моем примере выше? Или я все еще пропущу шаг?
Пожалуйста, разместите несколько своих данных. Я подозреваю, что у вас есть (lat, long) данные только. Кроме того, некоторые значения long не находятся в диапазоне (-180, 180) градусов. – swatchai
Я добавил ссылку на данные в вопросе. Что касается диапазона долгот, изменение значения (-180, 180) не меняет результат построения графика при попытке конвертировать LCC в Orthographic. Кажется, что, когда я использую преобразование «PlateCarree» с координатами х, у или необработанным латом, на графике. Это просто сбивает с толку, потому что во втором случае я не делаю ничего, чтобы преобразовать координаты, как в первом случае. – nawendt
Пример вашего обновления 1 является правильным только в том случае, если ваши данные имеют кордины в ортографической системе координат (а какие они не являются). В общем, 'projection' сообщает cartopy, как должна выглядеть нарисованная карта, а' transform' сообщает cartopy, в какой системе координат представлены ваши данные. Вы можете настроить 'projection' на любой прогноз, который вам нравится, но' transform' должен соответствовать какая система координат использует ваши данные. – ajdawson