你可以在纸板中更改虹膜立方体投影吗?

时间:2012-12-07 15:42:25

标签: python matplotlib cartopy python-iris

我非常喜欢这样的想法,即cartopy可以自动绘制在不同的地图投影中。但是,我无法弄清楚如何处理Iris立方体。作为一个姐妹项目,我希望我能够。有可能做这样的事吗?

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()

感谢

1 个答案:

答案 0 :(得分:4)

我拿了你的伪代码并用Iris的样本数据运行它:

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多维数据集应包含有关基础数据的完整元数据:坐标系是该元数据的一部分。

因此,要让示例正常运行,您只需在contourf调用中删除transform关键字参数:

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()

contoured result

iris gallery中有一个类似的例子,特别是http://scitools.org.uk/iris/docs/latest/examples/graphics/rotated_pole_mapping.html#rotated-pole-mapping-03(示例中的最后一个图)。

HTH,