Как правильно получить значения xticks и yticks с помощью Cartopy и Matplotlib? - PullRequest
0 голосов
/ 25 сентября 2018

Добрый вечер, все!

Сегодня я попытался создать систему для автоматического отображения данных в сетке, используя python (3.5), matplotlib (2.2.3) и Cartopy (0.16), все под Windows 10Я хотел бы получить значения xticks и yticks (координаты показаны на рисунке) и показать их пользователю (он может установить свои собственные значения).Проблема в том, что методы get_xticks () и get_yticks (), похоже, дают странные результаты.

Вот пример кода:

import numpy
import matplotlib.pyplot as plt
import cartopy

lon = numpy.arange(-180,180,1)
lat = numpy.arange(-90,90,1)
data = numpy.ones((len(lat), len(lon)))

ax = plt.subplot(1, 1, 1, projection=cartopy.crs.PlateCarree())
ax.pcolormesh(lon, lat, data, transform=cartopy.crs.PlateCarree(), cmap='jet')
ax.set_extent((-180,180,-90,90), cartopy.crs.PlateCarree())
ax.coastlines()

shp_file = cartopy.io.shapereader.natural_earth(resolution='110m', category='physical', name='land')
for land in cartopy.io.shapereader.Reader(shp_file).records():
    ax.add_geometries(land.geometry, cartopy.crs.PlateCarree(), facecolor='#e6e6e6')

gl = ax.gridlines(crs=cartopy.crs.PlateCarree(), draw_labels=True,
                  linewidth=1, color='black', alpha=1, linestyle='-')
gl.xlabels_top = True
gl.ylabels_left = True
gl.xlines = True
gl.ylines = True

plt.show()

print(gl.axes.get_xticks())
print(gl.axes.get_yticks())

Результаты предыдущего:

[-200. -150. -100.  -50.    0.   50.  100.  150.  200.] for X axis
[-100.  -75.  -50.  -25.    0.   25.   50.   75.  100.] for Y axis

Я не могу понять, где Cartopy и Matplotlib принимают эти значения ... и, поскольку я только начал использовать Cartopy, я не могу представить, что это ошибка ... Я привык работатьс Matplotlib, чтобы построить различные виды временных рядов.Но здесь я изо всех сил пытаюсь понять, что происходит и найти решение.

Итак, мой вопрос прост, есть ли простой способ получить значения xticks и yticks, как показано на рисунке?

Большое спасибо за вашу помощь!

Оливье

Обновление: я просто добавляю рисунок, который мы можем получить, с помощью кода, который я разместил выше.cartopy example

1 Ответ

0 голосов
/ 02 декабря 2018

Я не уверен, но я думаю, что ключ находится в matplotlib.ticker.MaxNLocator объекте, который по умолчанию использует gridliner:

print(gl.xlocator.tick_values(*ax.get_xlim()))
print(gl.ylocator.tick_values(*ax.get_ylim()))

дает

[-180. -120.  -60.    0.   60.  120.  180.]
[-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...