2

塗りつぶされた等高線に緯度経度データをプロットし、その上に地球の地図を重ねたいと思います。私はこのようなことを試みています:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1);axis(2);map(projection='rectangular',parameters=0,add=T)}
)

等高線はきれいにプロットされ、マップが表示されますが、等高線プロットの小さな領域に非常に小さな黒い長方形としてのみ表示されます。もちろん、マップが塗りつぶされた等高線図の領域全体に広がるようにします。

私も次のようなことを試しました:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1);axis(2);map(projection='rectangular',x=lons,y=lats,parameters=0,add=T)}
)

この場合、マップはまったくプロットされず、「描画するものがありません: すべての領域が範囲外です」というエラー メッセージが表示されます。誰が私が間違っているのか教えてもらえますか? ところで、格子パッケージは使いたくありません。私のグループが行っている他のことではうまくいきません。ありがとう。

4

2 に答える 2

3

わかった。気になる人には、答えがあります。最良の答えではないかもしれませんが、答えです。問題は、緯度と経度を表す一般的な方法が 2 つあることです: 度とラジアンです。経度を表す 3 番目の一般的な方法があります。ローカル時間、つまり浮動小数点数として一般化されたタイム ゾーン時間です。そして、生活をより面白くするために、度単位の経度は、しばしば -180 (東) から 180 (西) または 0 から 360 として与えられます。

これで、マップを表示しようとすると、R はマップ パッケージの内部に基づいて表示用の緯度経度単位を自動的に選択します。あるユニットのセットで作業していて、R が別のユニットのマップを表示したい場合、問題が発生します。もう 1 つの問題は、さまざまな地図投影法をさまざまな単位で表示したいということです。私が発見したように、「デフォルト」の投影は度数が好きです。経度で -180 から 180、緯度で -90 から 90 の制限を持つプロット四角形に表示したいと考えています。しかし、「長方形」投影は、デフォルトの投影と非常によく似ていますが、ラジアンが好きです。-pi から pi (経度) および -pi/2 から pi/2 (緯度) に伸びる長方形で表示する必要があります。 これらのプロット制限については、?mapproject ではまったく説明されていません。

したがって、ここで行う必要があるのは次のとおりです。1) 必要な地図投影法を決定し、それがプロットされる範囲を決定します。

> map(projection=foo,parameters=foo)
> par('usr')   # will return vector of plot limits

2) 自分のデータがどの単位で表現されているかを知ってください。他の人のデータ セットを取得したばかりの場合は、ここで驚くかもしれません。

3)プロットすると...

filled.contour(lons, lats, glb.data)

あなたの "lons" と "lats" があなたの投影法が期待する限界と一致する単位であるなら、あなたは大丈夫で、単純に地図を追加することができるはずです

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);map(projection=foo,parameters=foo,add=T)})

しかし、緯度と経度が投影に必要なものではない場合は、もう少し作業が必要です。par() を呼び出して、プロットの制限を再定義する必要があります。これは私のために働いたものです:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);par(usr=c(-180,180,-90,90));
map(add=T)})

そして、プロットの左端に本初子午線が必要な場合 (つまり、経度が x 軸上で 0 から 360 まで増加する場合)、par() と map() を 2 回呼び出しました。

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);
par(usr=c(0,360,-90,90));map(add=T);  #eastern hemisphere
par(usr=c(-360,0,-90,90));map(add=T)}   #western
)

他にもシワがあります。(たとえば、「長方形」射影には正確に-pi と +pi の制限はありません。) しかし、これまでの説明が理にかなっている場合は、それらを処理することができます。

于 2012-08-14T00:41:07.357 に答える
1

なぜ使用しないのimageですか?

image(lons, lats, glb.data)
library(maps)
map(add = TRUE)

議論をしようと思ったのはどこからmap()ですか?plot.axes

于 2012-08-09T22:26:39.477 に答える