如何将科学数据格式化为适当的数据系列以便在Ruby(Rails 3.1.x)中显示图形?

需要一些关于如何正确绘制非常小并存储为BigDecimal的数据的指导。

如果有人在任何图形场景中都有使用BigDecimals的经验,我相信你对如何将它们放入可用序列的输入将是非常宝贵的。

目前我正在使用lazy_high_charts ,看起来这似乎非常好,但是我遇到了一个问题,我还没有处理迄今为止BigDecimal规模的数据。

鉴于我的疑问,我将针对几个不同系列的数据提取大约1,000个数据点,精度范围从大约0.100E-9到大约0.100E-1。

准备这些数据系列以便在具有科学应用和精确度的图形中进行演示的最佳方法是什么? 我不确定我是否能继续使用BigDecimal或其他东西?


我目前用类似于以下的行查询数据库:

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

我很欣赏一些指导,从这个结果(再次,输出是一个BigDecimals数组)到适当的格式,将进入图表系列。

我用来在我的控制器中构建图表的代码的上下文示例是:

 @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 

我认为我对此有了进一步的了解已经决定将BigDecimals转换为字符串,如“ 如何通过ActiveRecord行结果中的属性名称访问字段? ”然而,最终看来它失败并且给出了不稳定的结果,因为系列函数:data我认为:data字段是数字输入。 我认为这最终会将json发送到highcharts,但是我仍然坚持尝试正确传递这些值。

当你这样做:

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

你将最终得到一个arrays数组,就像我们已经在其他地方讨论过的那样。 如果你摆脱了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,所以这里有一些猜测。