Масштабирование картографических орфографических участков - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь увеличить масштаб некоторых картографических сюжетов в ортогональной проекции, но, кажется, это невозможно с простым методом ax.set_extent().Код, который я использую:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure()
ax = plt.axes(projection = ccrs.Orthographic())
ax.set_global()
ax.set_extent((-120,120,50,90), crs = ccrs.PlateCarree())

Я получаю следующую ошибку: ValueError: Failed to determine the required bounds in projection coordinates.

На самом деле мне нужно было только установить нижнюю границу широты, чтобы построить график полярностирегион, который я раньше делал с Basemap.Однако я не вижу, как действовать с Cartopy.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Проблема здесь в том, что ваш экстент долготы слишком велик, поскольку ни -120, ни 120 не находятся на ортографическом диске с центральной долготой / широтой 0 (они «позади»).Сначала вы можете запросить, что такое глобальный экстент долготы, а затем использовать его вместо (-120, 120).

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure()
ax = plt.axes(projection = ccrs.Orthographic())
ax.set_global()

global_extent = ax.get_extent(crs=ccrs.PlateCarree())
ax.set_extent(global_extent[:2] + (50, 90), crs=ccrs.PlateCarree())
ax.coastlines()

Orthographic projection with limited extent

0 голосов
/ 06 февраля 2019

У меня есть небольшие проблемы с представлением, как должна выглядеть желаемая ортогональная проекция с ограниченными координатами - и, предположительно, у картопии есть схожие проблемы понимания: -).
Но, конечно, вы можете использовать другое (и потенциальнобольше подходит) проекция;LambertConformal может иметь смысл.

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure()
proj = ccrs.LambertConformal(central_longitude=-96.0, central_latitude=39.0, )
ax = plt.axes(projection = proj)

ax.set_extent((-120,120,50,90), crs = ccrs.PlateCarree())

ax.coastlines(resolution='110m')
ax.gridlines()
plt.show()

enter image description here

...