Странная настройка широты надписей в картографической проекции Миллера - PullRequest
0 голосов
/ 03 мая 2020

Просто, чтобы упростить задачу, я воспроизвел свою проблему, адаптировав пример из галереи последнего релиза cartopy

fig = plt.figure(figsize=(8, 10))

miller = ccrs.Miller(central_longitude=180)

ax = fig.add_subplot(1, 1, 1, projection=miller)

ax.set_global()
ax.coastlines()
ax.set_yticks(np.arange(-90, 90.5, 30), crs=miller)
lat_formatter = LatitudeFormatter()
ax.yaxis.set_major_formatter(lat_formatter)

plt.show()

enter image description here

По какой-то причине метки оси Y изменены и имеют странные значения. Потенциально что-то, что связано с LatitudeFormatter?

Важно: по некоторым причинам, связанным с окружающей средой, я использую cartopy 0.18.0b3.dev15 +

1 Ответ

3 голосов
/ 04 мая 2020

Cartopy дает вам именно то, что вы просили, то есть метки в (-90, -60, -30, 0, 30, 60, 90) в проекции Миллера , то есть не в градусах широты. Поскольку вы используете LatitudeFormatter, он преобразует эти точки проекции Миллера в градусы широты для вас.

Похоже, вы хотели сделать метку в системе координат широта / долгота, поэтому вам следует используйте ccrs.PlateCarree() в качестве аргумента crs при создании тиков, например:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.mpl.ticker import LatitudeFormatter
import numpy as np

fig = plt.figure(figsize=(8, 10))

miller = ccrs.Miller(central_longitude=180)

ax = fig.add_subplot(1, 1, 1, projection=miller)

ax.set_global()
ax.coastlines()
ax.set_yticks(np.arange(-90, 90.5, 30), crs=ccrs.PlateCarree())
lat_formatter = LatitudeFormatter()
ax.yaxis.set_major_formatter(lat_formatter)

plt.show()

Miller projection with latitude labels

...