2013-04-10 80 views
0

我想加載x csv文件並將數據呈現爲折線圖。加載1個CSV文件並創建折線圖工作已經很好。在一個圖表中加載多個csv文件(正確順序)

我的csv文件:

Date,PV,Energy 
1355100420,0.000,0.851 
1355100480,0.000,0.841 
1355100540,0.000,1.000 
1355100600,0.000,0.984 
1355100660,0.000,1.006 
1355100720,0.000,2.769 
1355100780,0.000,2.791 

我的問題:CSV文件的數量是不同的,並以正確的順序是非常重要的,因爲x軸是我的時間軸,我在第1日期/時間我的csv列。

讀一個CSV:

$.get(csv_file, function(data) { 
    var series = []; 
    // Split lines 
    var lines = data.toString().split('\n'); 
    // For each line, split the record into seperate attributes 
    $.each(lines, function(lineNo, line) { 
     var items = line.split(','); 
     // first line contains the series names 
     if (lineNo === 0) { 
      for (var i = 1; i < items.length; i++) { 
       series.push({ 
        name : items[i], 
        data : [], 
        dataGrouping : { 
         enabled : false 
        } 
       }); 
      } 
     } else { 
      for (var i = 1; i < items.length; i++) { 
       // get the serie 
       var serie = series[i - 1]; 
       serie.data.push([parseFloat(items[0] * 1000), parseFloat(items[i])]); 
      } 
     } 
    }); 
    chart = new Highcharts.StockChart({ 
     chart : { 
      renderTo : container_id, 
      type : 'line', 
      reflow : true, 
     }, 
     xAxis : { 
      type : 'datetime' 
     }, 
     series : series 
    }); 
}); 

但我怎麼能以正確的順序讀取多個CSV文件?

非常感謝!

+0

這似乎更像是一個預處理文件I/O而不是高層次的問題。從多個csv文件創建一個連續的數據集並將其加載到高圖中。 – 2013-04-10 06:59:11

回答

0

您可以使用幾個get()函數並按正確的順序推送數據。

使用2個數據csv的示例。

JS

var options = { 
    chart: { 
     renderTo: 'container', 
     zoomType: 'xy', 
    }, 
    title: { 
     text: '' 
    }, 
    series: [] 
}; 
$.get('data1.csv', function (data) { 
    // Split the lines 
    options.series.push({ 
     name: 'aaa', 
     data: [] 
    }); 

    var lines = data.split('\n'); 
    $.each(lines, function (lineNo, line) { 
     var items = line.split(','); 
     options.series[0].data.push([ 
     parseFloat(items[0]), 
     parseFloat(items[1])]); 
    }); 
}); 

$.get('data2.csv', function (data) { 
    // Split the lines 
    options.series.push({ 
     data: [] 
    }); 
    var lines = data.split('\n'); 
    $.each(lines, function (lineNo, line) { 
     var items = line.split(','); 
     options.series[1].data.push([ 
     parseFloat(items[0]), 
     parseFloat(items[1])]); 
    }); 
    var chart = new Highcharts.Chart(options); 
}); 

CSV1

16.40803,22.670 
16.40772,20.840 
16.40740,20.327 
16.40709,21.532 
16.40678,24.302 
16.40646,26.108 

CSV2

16.43353, -19.142 
16.43322 , -18.813 
16.43290 ,-19.157 
16.43259 ,-19.417 
16.43228 ,-19.428 
16.43196 ,-19.747 
+0

我對你的代碼進行了格式化,但你在''xy''之後有一個額外的逗號。 – 2013-04-10 11:43:40

+0

好吧,我的錯。 – 2013-04-10 11:44:35

+0

csv文件的數量是多種多樣的,所以我必須在另一個之後加載一個csv以觀察正確的順序! – Daniel 2013-04-10 12:00:18

0

她,你可以找到例如如何加載多個文件:http://www.highcharts.com/stock/demo/compare

不同的是,你的東東d首先解析這些值(如你在第一篇文章中所做的那樣),並將它們推入一個數組中。下一步就是簡單地對這個數組進行排序(簡單的data.sort(function(a,b){ return a[0] - b[0]; })就足夠了),並將排序的數據放入series.data

+0

正確的數字謝謝,就是這樣! – Daniel 2013-04-15 05:26:38