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 一样?

最终,我需要在 Ruby 中完成这项工作,最好使用 ruby​​-gd 或 Rmagick,但我也非常感谢任何与语言无关的解决方案。

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

Chip,我知道,不使用 Ruby,但假设 Belisarius 的点计算很好,我会使用 MathematicaListContourPlot代替,因为它更容易理解,并且提供了更清晰的画面。

(* 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 回答