Javascript 如何使用Google图表在两个输入文件/数组之间切换?

Javascript 如何使用Google图表在两个输入文件/数组之间切换?,javascript,jquery,google-visualization,Javascript,Jquery,Google Visualization,我用谷歌图表包括了多个图表。我希望一次显示一个图表,但允许用户在多个csv输入文件之间切换。输入数据的更改还需要更改图表和轴标题。我是Javascript新手,我不知道如何最好地做到这一点 以下是我目前如何绘制一个csv。任何关于如何切换输入文件更改的提示都将不胜感激。我目前正在使用jquery csv模块将我的csv文件读入数组 在页眉中创建的脚本 google.charts.load('current', {'packages':['corechart']}); google.cha

我用谷歌图表包括了多个图表。我希望一次显示一个图表,但允许用户在多个csv输入文件之间切换。输入数据的更改还需要更改图表和轴标题。我是Javascript新手,我不知道如何最好地做到这一点

以下是我目前如何绘制一个csv。任何关于如何切换输入文件更改的提示都将不胜感激。我目前正在使用jquery csv模块将我的csv文件读入数组

在页眉中创建的脚本

  google.charts.load('current', {'packages':['corechart']});
  google.charts.setOnLoadCallback(drawChart);

  function drawChart() {

    // Reading in a locally stored CSV file to an array of numbers
    $.get("2017T.csv", function(csvString) {
    var dataarray = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar});  

    // Turning array into format usable by Google Charts
    var data = google.visualization.arrayToDataTable(dataarray);

    // Formatting Google Charts
    var options = {
      title: 'Raspberry PI Temperature plot - Yearly',
      titleTextStyle: {
        fontSize: '18',
        },
      vAxis: { 
        title: 'Temperature (\u00B0 C)' ,
        titleTextStyle: {
            italic: 'FALSE',
            fontSize: '14',
        },
        baseline: '0',
        baselineColor: 'black',
        gridlines: { color: 'transparent'},
        },
      hAxis: {
        title: 'Date',
        titleTextStyle: {
            italic: 'FALSE',
            fontSize: '14',
        },
        baseline: '0',
        baselineColor: 'black',
        gridlines: { color: 'transparent'},
        },
      curveType: 'function',
      backgroundColor: {
        stroke: 'black',
        strokeWidth: '5',
        },
      haxis: {
        title: 'Hello',
        },
      legend: {position: 'none'},
    };

    //Creating Charts
    var chart = new google.visualization.LineChart(document.getElementById('temp_year'));

    chart.draw(data, options);
    });
  }
在正文中调用图表

<div id="temp_year" style="width: 800px; height: 400px"></div>

您可以通过将drawChart函数设置为通用函数,然后在每次绘制时传入特定于图表的数据来实现这一点。这允许您使用新数据重新绘制,甚至使其能够处理动态数据

例如,根据您的代码,您可以执行以下操作:

var chartData = {};
var dataarray;

google.charts.load('current', { 'packages': ['corechart'] });
google.charts.setOnLoadCallback(function () {
    drawChart(chartData);
});

// Reading in a locally stored CSV file to an array of numbers
$.get("2017T.csv", function (csvString) {
    dataarray = $.csv.toArrays(csvString, { onParseValue: $.csv.hooks.castToScalar });
});

// Turning array into format usable by Google Charts
var data = google.visualization.arrayToDataTable(dataarray);

chartData = {
    title: 'Raspberry PI Temperature plot - Yearly',
    data: data
}

function drawChart(chartData) {

    // Formatting Google Charts
    var options = {
        title: chartData.title,
        titleTextStyle: {
            fontSize: '18',
        },
        vAxis: {
            title: 'Temperature (\u00B0 C)',
            titleTextStyle: {
                italic: 'FALSE',
                fontSize: '14',
            },
            baseline: '0',
            baselineColor: 'black',
            gridlines: { color: 'transparent' },
        },
        hAxis: {
            title: 'Date',
            titleTextStyle: {
                italic: 'FALSE',
                fontSize: '14',
            },
            baseline: '0',
            baselineColor: 'black',
            gridlines: { color: 'transparent' },
        },
        curveType: 'function',
        backgroundColor: {
            stroke: 'black',
            strokeWidth: '5',
        },
        haxis: {
            title: 'Hello',
        },
        legend: { position: 'none' },
    };

    //Creating Charts
    var chart = new google.visualization.LineChart(document.getElementById('temp_year'));

    chart.draw(chartData.data, options);
}

我所做的就是创建一个chartData对象,您可以在其中定义任何特定于图表的变量。我只做了标题和数据,但很明显,你可以做你想做的任何图表选项。然后,当您想重画图表时,您可以用新图表的数据覆盖chartData对象,并用新数据再次调用drawChart。

有什么原因不能将新数据集分配给数据对象并重画图表吗?这就是我想做的。不过,我不确定如何根据用户输入来实现这一点。理想情况下,我希望将文件名和图表标题设置为变量,并根据用户按钮的按下进行更改。我甚至很乐意走一条低效的路线,对一堆单独的图形进行编码,然后一次只显示一个,根据用户按钮的按下进行切换。不过我不知道该怎么做。