2

カートピーがさまざまな地図投影法で自動的にプロットできるというアイデアが本当に気に入っています。しかし、アイリスキューブの扱い方がわかりませんでした。その姉妹プロジェクトとして、私はできるかもしれないと思っていました。このようなことは可能ですか?

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

ありがとう

4

1 に答える 1

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

輪郭のある結果

アイリスギャラリーにも同様の例があります。具体的には、 http://scitools.org.uk/iris/docs/latest/examples/graphics/rotated_pole_mapping.html#rotated-pole-mapping-03(例の最後のプロット)です。 )。

HTH、

于 2012-12-10T09:15:21.690 に答える