2

バックグラウンド

沿岸情報データ プログラム (CDIP) に従って、彼らはhttp://cdip.ucsd.edu/?nav=recent&sub=observed&units=metric&tz=UTC&pub=public&map_stati=1,2 で波のうねりのスペクトル熱/強度マップを生成しています。 3&stn=100&stream=p1&xitem=dir_spectrum .

これは、エネルギー密度、持続時間 (秒単位)、および方向 (南を表す 180 度の度数) を含むデータを使用して動的に生成されます。

データサンプル

データの説明は次のとおりです: http://cdip.ucsd.edu/data_access/MEM_2dspectra.cdip

ブイ 100 のデータ サンプルを次に示します (熱/強度/スペクトル マップに示されているのと同じブイ: http://cdip.ucsd.edu/data_access/MEM_2dspectra.cdip?100

質問

CDIP のサイトの URL の例のように、この 2 次元データを取得して熱/強度マップを作成し、極座標マップ (および適切な縮尺) にオーバーレイされるようにするにはどうすればよいですか?

最終的には、できれば ruby​​-gd または Rmagick を使用して、これを Ruby で行う必要がありますが、言語に依存しないソリューションも大歓迎です。

4

2 に答える 2

3

私は本当に急いでいるので、今は終わらせることができませんが、まだ誰も答えていないので、ここに最初のアプローチがあります:

Mathematicaのコード(申し訳ありませんが、今は時間がありません):

a = Import["http://cdip.ucsd.edu/data_access/MEM_2dspectra.cdip?100", 
   "Table"];

Graphics@Flatten[Table[

    (*colors, dont mind*)
    {ColorData["CMYKColors"][(a[[r, t]] - .000007)/(.0003 - 0.000007)], 

    (*point size, dont mind*)
    PointSize[1/Sqrt[r]/10], 

    (*Coordinates for your points "a" is your data matrix *)
       Point[
            {(rr =Log[.025 + (.58 - .25)/64 r]) Cos@(tt = t 5 Degree), 
              rr Sin@tt}]
            }

     (*values for the iteration*)
     , {r, 7, 64}, {t, 1, 72}], 1] 

     (*Rotation, dont mind*)
     /. gg : Graphics[___] :> Rotate[gg, Pi/2]  

私はまだ正しいカラースケールを取得できません:

ここに画像の説明を入力してください

于 2011-03-02T03:17:23.437 に答える
2

チップ、私はRubyを使用していないことを知っていますが、ベリサリウスのポイント計算が問題ないと仮定すると、ListContourPlot代わりにMathematica を使用します。理解しやすく、より明確な画像が得られるからです。

(* Read in data, the web address can be specified *)
a = Import[<url of cpid data>, "Table"];

Import最初のサブリストのタグを残しpre、最後に単一要素のサブリストとして、これを削除します

dat = a[[ ;; -2]][[All, -72;; ]];

最初に最後の要素を除くすべての要素を取得し、次に残りの各サブリストの最後の 72 要素を取得します。

ListContourPlotフォームのポイントのリストが必要なので、他の場所で説明されているように、そのフォーム{{x, y, f}, ...}に変換する必要があります:dat

pts =Flatten[
    Table[ {
          (rr =Log[.025 + (.58 - .25)/64 r]) Cos@(tt = t 5 Degree), (* x-coord *)
          rr Sin@tt, (* y-coord *)
          dat[[r,t]] (* function value *)
           },
           {r, 7, 64}, {t, 1, 72}
         ],
    1 ]

そしてそれらをプロットします

ListContourPlot[pts,
  ColorFunctionScaling -> False,
  ColorFunction -> (ColorData["CMYKColors"][(# - .000007)/(.0003 - 0.000007)]&)
  ]

これは与える:

OPが提供するcpidデータのListContourPlot

クリッピングとColorFunctionスケーリングを修正することで修正できます。また、いくつかの作業で放射状の輪郭を追加することもできます。

于 2011-03-02T21:15:33.410 に答える