Можно ли изменить проекции куба радужной оболочки в картопии?

Мне очень нравится идея, что cartopy может автоматически рисовать в разных картографических проекциях. Однако я не мог понять, что делать с кубиками Ирис. Поскольку это родственный проект, я ожидал, что смогу. Можно ли сделать что-то подобное?

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

someCube = I.load('someCube.pp')
ax = plt.axes(projection=ccrs.Robinson())
I.plot.contourf(someCube, transform=ccrs.Robinson())
plt.show()

спасибо


person nrob    schedule 07.12.2012    source источник
comment
пожалуйста, примите мой ответ, если он решил вопрос. Это будет означать, что вопрос не появится в категории без ответа для тега python-iris, и поможет нам найти вопросы, которые еще нужно рассмотреть. Спасибо!   -  person pelson    schedule 04.09.2013


Ответы (1)


Я взял ваш псевдокод и сделал его работоспособным с примерами данных Ирис:

import iris
import iris.plot as iplt
import cartopy.crs as ccrs
import matplotlib.pyplot as plt


fname = iris.sample_data_path('air_temp.pp')
air_temp = iris.load_cube(fname)

ax = plt.axes(projection=ccrs.Robinson())
iplt.contourf(air_temp, transform=ccrs.Robinson(central_longitude=180))
ax.coastlines()

plt.show()

Если вы запустите этот код, вы получите исключение в следующем виде:

Traceback (most recent call last):
  File "using_custom_projections.py", line 11, in <module>
    iris.plot.contourf(air_temp, transform=ccrs.Robinson())
  File "lib/iris/plot.py", line 452, in contourf
    result = _draw_2d_from_points('contourf', None, cube, *args, **kwargs)
  File "lib/iris/plot.py", line 263, in _draw_2d_from_points
    result = _map_common(draw_method_name, arg_func, iris.coords.POINT_MODE, cube, data, *args, **kwargs)
  File "lib/iris/plot.py", line 406, in _map_common
    assert 'transform' not in kwargs, 'Transform keyword is not allowed.'
AssertionError: Transform keyword is not allowed.

Который пытается сказать вам, что вам не нужно указывать, в каком «преобразовании» (или системе координат) находится куб. Причина этого в том, что куб Iris должен содержать полные метаданные о базовых данных: системы координат часть этих метаданных.

Итак, чтобы пример заработал, вы можете просто удалить аргумент ключевого слова transform в вызове contourf:

import iris
import iris.plot as iplt
import cartopy.crs as ccrs
import matplotlib.pyplot as plt


fname = iris.sample_data_path('air_temp.pp')
air_temp = iris.load_cube(fname)

ax = plt.axes(projection=ccrs.Robinson(central_longitude=180))
iplt.contourf(air_temp)
ax.coastlines()

plt.show()

контурный результат

Похожий пример есть в галерее iris, в частности http://scitools.org.uk/iris/docs/latest/examples/graphics/rotated_pole_mapping.html#rotated-pole-mapping-03 (самый последний график в примере).

ХТХ,

person pelson    schedule 10.12.2012
comment
Спасибо за обновление @user1862785. Если это ответило на ваш вопрос, не могли бы вы принять этот ответ, нажав на галочку под кнопками голосования слева от этого ответа - это означает, что нам будет легче отслеживать вопросы, оставшиеся без ответа. Спасибо - person pelson; 13.12.2012