2017-02-07 20 views
0

我正在使用amchart繪製圖表。它從csv文件獲取數據並將其放置在一個線形圖中。我試圖做的事情是改變圖中顯示的值的數量。例如,我只想顯示csv文件的最後30個值。這是我的Amchart設置:更改AmChart中的值數量

var chart = AmCharts.makeChart(htmlID, { 
      "type": "serial", 
      "color": "#FFFFFF", 
      "theme": "light", 
      "titles": [{ 
       "text": graphTitle, 
       "alpha": 1, 
       "color": "#FFFFFF" 
      }], 
      "dataProvider": data, 
      "valueAxes": [{ 
       "title": xTitle, 
       "gridColor": "#FFFFFF", 
       "gridAlpha": 0.3, 
       "dashLength": 0 
      }], 
      "gridAboveGraphs": true, 
      "startDuration": 1, 
      "graphs": [{ 
       "balloonText": "[[category]]: <b>[[value]]</b>", 
       "fillAlphas": 0, 
       "lineAlpha": 1, 
       "type": graphType, 
       "bullet": "round", 
       "valueField": xField 
      }], 
      "chartCursor": { 
       "categoryBalloonEnabled": false, 
       "cursorAlpha": 0, 
       "zoomable": true 
      }, 
      "categoryField": yField, 
      "categoryAxis": { 
       "title": yTitle, 
       "autoGridCount": false, 
       "gridCount": 20, 
       "gridPosition": "start", 
       "gridAlpha": 0, 
       "tickPosition": "start", 
       "tickLength": 20, 
       "labelRotation": 290 
      } 
     }); 

    }); 

這是德parseCSV功能:

 function parseCSV(data) { 
     //replace UNIX new lines 
     data = data.replace(/rn/g, "n"); 
     //replace MAC new lines 
     data = data.replace(/r/g, "n"); 
     //split into rows 
     var rows = data.split("n"); 

     // loop through all rows 
     for (var i = 0; i < rows.length; i++) { 
      // this line helps to skip empty rows 
      if (rows[i]) { 
       // our columns are separated by comma 
       var column = rows[i].split(","); 

       var category = column[yLocation]; 
       // second item is value of the second column 
       var value = column[xLocation]; 

       // create object which contains all these items: 
       var dataObject = { 
        //Or change this to field names! Like STN and TEMP 
        ID: category, 
        TEMP: value 
       }; 
       // add object to chartData array 
       chartData.push(dataObject); 
      } 
     } 
     chart.validateData(); 
    } 

我試圖改變for循環,因此只讀取最後30行。我不知道爲什麼,但不知何故,這是行不通的。 因此問題是如何改變圖的值的數量。

回答

0

您可以使用數組slice方法將其分配給圖表之前,切片CSV陣列的最後30個值:

function parseCSV(data) { 
    //replace UNIX new lines 
    data = data.replace(/\r\n/g, "\n"); 
    //replace MAC new lines 
    data = data.replace(/\r/g, "\n"); 
    //split into rows 
    var rows = data.split("\n"); 

    //get the last 30 
    if (rows.length > 30) { 
    rows = rows.slice(rows.length - 31); 
    } 

    // loop through all rows 
    for (var i = 0; i < rows.length; i++) { 
    // this line helps to skip empty rows 
    if (rows[i]) { 
     // our columns are separated by comma 
     var column = rows[i].split(","); 

     var category = column[yLocation]; 
     // second item is value of the second column 
     var value = column[xLocation]; 

     // create object which contains all these items: 
     var dataObject = { 
     //Or change this to field names! Like STN and TEMP 
     ID: category, 
     TEMP: value 
     }; 
     // add object to chartData array 
     chartData.push(dataObject); 
    } 
    } 
    chart.validateData(); 
} 

這裏有一個demo使用你的代碼。

+0

感謝您的評論!問題依然存在。我認爲還有一個不同的問題。這是csv文件的一個片段。 'STN, 「日期」, 「TIME」, 「TEMP」, 「DEWP」, 「STP」, 「SLP」, 「VISIB」, 「WDSP」, 「PRCP」, 「SNDP」 ,「FRSHTT」,「CLDC」,「WNDDIR」 969330,2017-02-07,10:13:34,28.9,27.2,1002.1,1009.5,14.6,12.5,0.01,0.0,010000,68.6,291, 963230 ,2017-02-07,10:13:34,30.1,26.5,1034.0,1013.3,17.0,6.8,0.02,0.0,010000,50.3,106 968810,2017-02-07,10:13:34,29.7 ,26.4,1007.1,1007.8,12.5,7.7,0.00,0.0,0000,00,12.5,65' – tehbobshow

+0

您可以分叉和修改我提供的codepen並重現您遇到的問題嗎?如果沒有親自查看,很難說出你的問題。 – xorspark

+0

那麼,我真的不知道如何使用該codepen網站。但問題是我沒有改變粘貼在問題中的代碼中的任何內容。你看到的所有東西都是我擁有的。 imgur [photo](http://imgur.com/a/PUuI3)是我運行網站時得到的。 我也不明白爲什麼切片會起作用,但更改for循環不起作用。 – tehbobshow