2017-11-17 7 views
1

最近、私はxarrayを使って一連のNetCDFファイルを読み込み、カートリッジを使ってプロットしています。xarray.DataArray.rollメソッドは不要なアーティファクトを作成します

今日、私は面白いことに気付きました。関心のある分野では、20Wから40E経度のものを選択する必要があります。 lonは0から0-360までで始まるので、設計上、NCLや地理空間データ用の他の特定のツールボックスのように、1つの方法ではできません。KEdiff_mean.sel(lat=slice(-50, -10),lon=slice(-20,40))代わりにisel(lon=slice(-200,400)(私は3600 * 1800グローバルグリッドで作業する)を呼び出すと空のデータ配列が返され、この素晴らしいDataArray.rollメソッドが見つかりました。

経度次元に沿ってDataArrayを圧延することによって、私はその後 KEdiff_mean.roll(lon=1800).isel(lon=slice(1600,2200)).sel(lat=slice(-50, -10))

が面白いです何、私はDataArray.plotを使用して、それをプロットするとき、私はこの奇妙な横縞を得た0度線を越え、私が欲しい経度を選択することができます値のない領域に適用されます。ロール方式が期待どおりに動作しなかったか、何かが欠けていましたが、ストライプ以外のプロットが正しいように見えました。誰もが光を当てることはできますか?この循環経度選択を処理するための推奨される方法は何ですか?緯度経度座標を最初に0-360から-180に置き換えてデフォルトで180にすることはできますか?ありがとうございました!

これは正しいプロットである:私はプロットのグローバルその後、設定範囲をプロット Correct plot

ロールが呼び出されたとき: Roll before selection

+0

私は手動で0から360までの経度値をラップすることは確かにこの問題を解決することを疑う - それは確かです私はまず何をしようとしますか? – shoyer

答えて

0

私は何が起こっているか任意のアイデアを持っていると言うことはできません土地のストライプが、1つのハックは、私は

hs = xr.open_dataarray('hs') # 2D file 
mask = hs.where(hs > 0) # Keep points with data > 0, set others to NaN 
new_var = new_var.where(mask > 0) # new_var should be 2D 

別ヘクタールを使用し、私の波形データ用xr.whereなどを使用して、元のデータからマスクを使用していますCKは(私はあなたの質問に答えるいないよ知っている)のデータをプロットし、土地の上に機能を追加することです

import cartopy.feature as cfeature 
# ... 
ax.add_feature(cfeature.LAND, facecolor='white') 
関連する問題