Cartopy - круглые полярные проекции только для полярных регионов?Python

Программы на Python
Anonymous
 Cartopy - круглые полярные проекции только для полярных регионов?

Сообщение Anonymous »

Я пытаюсь нарисовать пару круглых полярных проекций с центрами на северном и южном (небесных) полюсах в качестве дополнения к более традиционной звездной карте. Они должны охватывать только около 20 градусов широты каждый.
Я могу заставить cartopy рисовать разумные полярные проекции всей небесной сферы с центром на любом полюсе, но если я попытаюсь ограничить диапазон широты, азимутально-эквидистантный график схлопнется до вертикальной линии (!), а стереографическая проекция станет квадратной, вот так:
Изображение
  • Вверху слева: проекция азека всей небесной сферы с центром на северном полюсе.
  • Вверху справа: стереопроекция всей небесной сферы с центром на южном полюсе.
  • Внизу слева: проекция азека от 70° с.ш. к северу полюс.
  • Внизу справа: стереопроекция от 70°ю.ш. до южного полюса.
Мне нужны круглые графики, как наверху, но обрезанные на 70° с.ш. и 70°ю.ш. соответственно.
Код, который у меня есть сейчас:
from cartopy import crs
from math import pi as PI
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

CEL_SPHERE = crs.Globe(
ellipse=None,
semimajor_axis=180/PI,
semiminor_axis=180/PI,
)
PC_GALACTIC = crs.PlateCarree(globe=CEL_SPHERE)

def render_map(path, width, height):
fig = plt.figure(layout="constrained", figsize=(width, height))
try:
gs = GridSpec(2, 2, figure=fig)

axN1 = fig.add_subplot(
gs[0, 0],
projection=crs.AzimuthalEquidistant(
central_latitude=90,
globe=CEL_SPHERE,
)
)
axN1.gridlines(draw_labels=True)

axS2 = fig.add_subplot(
gs[0, 1],
projection=crs.SouthPolarStereo(globe=CEL_SPHERE)
)
axS2.gridlines(draw_labels=True)

axN2 = fig.add_subplot(
gs[1, 0],
projection=crs.AzimuthalEquidistant(
central_latitude=90,
globe=CEL_SPHERE,
)
)
axN2.set_extent((-180, 180, 70, 90), crs=PC_GALACTIC)
axN2.gridlines(draw_labels=True)

axS2 = fig.add_subplot(
gs[1, 1],
projection=crs.SouthPolarStereo(globe=CEL_SPHERE)
)
axS2.set_extent((-180, 180, -90, -70), crs=PC_GALACTIC)
axS2.gridlines(draw_labels=True)

fig.savefig(path)
finally:
plt.close(fig)

if __name__ == "__main__":
render_map("map_test.pdf", 12, 12)



Подробнее здесь: https://stackoverflow.com/questions/797 ... ar-regions

Вернуться в «Python»