2012-01-06 4 views
1

非常に小さく、BigDecimalとして保存されたデータを適切にグラフ化する方法に関するガイダンスが必要です。Ruby(Rails 3.1.x)のグラフ表示用の科学データを適切なデータ系列にフォーマットするにはどうすればよいですか?

グラフ作成のシナリオで誰かがBigDecimalsを使用したことがある人は、これらを使用可能なシーケンスにどのように配置したかについての貴重な情報は貴重です。

現在、私はlazy_high_chartsを使用していますが、これは例外的にうまくいくと思われますが、これまでの分のBigDecimalスケールでデータを処理していないヒッチに遭遇しました。

質問があれば、約0.100E-9から約0.100E-1までの精度の範囲内のいくつかの異なる一連のデータに対して、約1,000データポイントを引き出します。

これらのデータ系列を科学的なアプリケーションを持つグラフに表示するための最良の方法は何ですか?精度は重要ですか?私はBigDecimalや他の何かで続けるべきかどうかわからないのですか?

私は、現在のような行を使用してデータベースを照会しています

:私はこの結果から行くのいくつかの指導をいただければと思います

series_a = dataset.order("date").select('data_set.data1').limit(1000).all.zip 

(再び、出力のBigDecimalの配列である)へチャートシリーズに入るための適切なフォーマット。

私は私のコントローラでグラフを構築するために使用しているコードの文脈例は次のとおりです。

@h = LazyHighCharts::HighChart.new('graph') do |f| 
    series_a = dataset.order("date").select('data_set.data1').limit(1000).all.zip 
    series_b = dataset.order("date").select('data_set.data3').limit(1000).all.zip 

    f.series(:name => 'Data 1', :data => series_a) 
    f.series(:name => 'Data 2', :data => series_b) 

    f.chart({:defaultSeriesType => "line" }) 
    f.yAxis [ 
     {:title => { :text => "Left Y Label", :margin => 10} }, 
     {:title => { :text => "Right Y Label"}, :opposite => true } 
    ] 
    f.xAxis(:title => { :text => "X Label"}) 
    f.title(:text => "Graph Title") 
    f.legend(:align => 'right', :verticalAlign => 'top', :y => 75, :x => -50, :layout => 'vertical') 
end 

が、私はこれがすることを決めたの私の理解でに沿ってさらに少しだと思いますBigDecimalを "How to access fields by attribute name from ActiveRecord row results?"のように文字列に変換します。しかし、最終的にこれは失敗し、シリーズ関数:dataフィールドが期待しているように不安定な結果が出ます。私はこれが最終的にハイチャートにjsonを出すと思っていますが、これらの値を正しく渡すための私の試みではまだまだ固執しています。

答えて

1

あなたがこれを行うとき:我々はすでにelsewhereを議論したように

series_a = dataset.order("date").select('data_set.data1').limit(1000).all.zip 

あなたは、配列の配列になってしまいます。 zipを取り除くと、オブジェクトの配列がseries_aになるはずです。

series_a = dataset.order("date"). 
        select('data_set.data1'). 
        limit(1000). 
        all. 
        map(&:data1) 

や、data1が(原因データベース内の固定精度タイプを使用して)のBigDecimalであるならば、多分あなたはこれをしたいと思います:私は、チャートがとても数字の配列と幸せになるだろうと推測するだろう:

series_a = dataset.order("date"). 
        select('data_set.data1'). 
        limit(1000). 
        all. 
        map { |o| o.data1.to_f } 

グラフが何をすべきかを知るべき浮動小数点値の配列を取得する。

私はHighchartsに精通していないので、ここにいくつかの推測があります。

+0

はい、 '.zip'は既に消えています。上の例のそれを落とすのを忘れてしまった。私が苦労しているのは、数値と文字列の両方が必要なように見えるということです。私はto_fが鍵だと思っていますが、これまでの私の演習では、各角度でスタックレベルが深すぎます。今あなたの提案を試みます。 – ylluminate

+0

これまでのところ、私はこのことで口をはずしています:http://pastebin.com/MZFWbrcn - 私は2つのデータポイントを引き出しているので、なぜ私はクエリを保存することができないのか分かりません。私はあなたのブロックと一緒に2つのブロックを行うこともできますが、それでもなお...私の問題はまだ分かりません。 – ylluminate

+0

まあ、私は現在ねじ込まれています。単純な 'puts" 100 ".to_f.to_s"でテストすることも同じエラーで失敗します。 – ylluminate

関連する問題