【问题标题】:Google Visualization Line chart not able to show custom points谷歌可视化折线图无法显示自定义点
【发布时间】:2017-04-30 15:59:34
【问题描述】:

我正在尝试显示两支球队在每个回合中得分的 Overs 和 Runs 之间的折线图。

function drawChart() {
season = document.getElementById('ipl_Seasons');
var jsonData = $.ajax({
    url: "******************************=" + season.value,
    dataType: "json",
    crossDomain: true,
    async: false
}).responseText;

var parsed = JSON.parse(jsonData);

var arr = [];

var validation = {

    isNumber: function (str) {
        var pattern = new RegExp('^[0-9]+$');
        return pattern.test(str);  // returns a boolean
    }
};

for (var x in parsed) {
    arr.push(parsed[x]);
}

var elementById = document.getElementById('matches_Number');

if (elementById !== null && validation.isNumber(elementById.value)) {

    var matchByIDandSeason = elementById.value;
    var finalMatch = arr[parseInt(matchByIDandSeason) - 1];
    var mapOfOversAndRunsForFirstInnings = {};
    var mapOfOversAndRunsForSecondInnings = {};
    var matchDetails = finalMatch.matchDetails;
    var perOverRuns = 0;
    for (var i = 0; i < matchDetails.length; i++) {
        if (matchDetails[i].inning === 1) {
            if(matchDetails[i].over in mapOfOversAndRunsForFirstInnings){
                mapOfOversAndRunsForFirstInnings[matchDetails[i].over] = parseInt(mapOfOversAndRunsForFirstInnings
                        [matchDetails[i].over])+matchDetails[i].total_runs;
            }else {
                perOverRuns = 0;
                perOverRuns =  matchDetails[i].total_runs + perOverRuns;
                mapOfOversAndRunsForFirstInnings[matchDetails[i].over] = perOverRuns;
            }
        } else {
            if(matchDetails[i].over in mapOfOversAndRunsForSecondInnings){
                mapOfOversAndRunsForSecondInnings[matchDetails[i].over] = parseInt(mapOfOversAndRunsForSecondInnings
                        [matchDetails[i].over])+matchDetails[i].total_runs;
            }else {
                perOverRuns = 0;
                perOverRuns =  matchDetails[i].total_runs + perOverRuns;
                mapOfOversAndRunsForSecondInnings[matchDetails[i].over] = perOverRuns;
            }
        }
    }


    var dataArray = [['Overs', finalMatch.team1, finalMatch.team2]];
    var firstInningRun = 0;
    var secondInningRun = 0;
    var chartDataForTeam1 = [];
    var chartDataForTeam2 = [];
    for (var overs = 1; overs <= 20; overs++) {
        chartDataForTeam1.push(mapOfOversAndRunsForFirstInnings[overs]);
        chartDataForTeam2.push(mapOfOversAndRunsForSecondInnings[overs]);
        dataArray.push([overs, 0, 0]);
    }

    var materialOptions = {
        chart: {
            title: 'Cricket Performance'
        },
        width: 900,
        height: 500,
        hAxis: {
            gridlines: {count: 10},
            minValue : 1,
            maxValue : 20,
            title: 'Overs'
        },
        vAxis: {
            minValue : 1,
            title: 'Runs'
        },
        animation: { duration: 250 }
    };


    var data = new google.visualization.arrayToDataTable(dataArray);
    var chart = new google.visualization.ColumnChart(document.getElementById('columns_chart_div'));

    var team1Index = 0;
    var team2Index = 0;

    var drawChart = function() {


        if (team1Index < 20) {
            data.setValue(team1Index, 1, chartDataForTeam1[team1Index++]);
            chart.draw(data, materialOptions);
        }

        if(team2Index < 20){
            data.setValue(team2Index, 2, chartDataForTeam2[team2Index++]);
            chart.draw(data, materialOptions);
        }


    };

    google.visualization.events.addListener(chart, 'animationfinish', drawChart);
    chart.draw(data, materialOptions);
    drawChart();
}

}

这就是结果。但默认点设置是显示来自 x 和 y 坐标的数据。我想在绘制的折线图中显示第三个数据系列,其中每局都有三柱门,而不是点。就像他们在板球图中显示的那样。

有没有办法通过谷歌可视化 api 或任何其他 api 来实现这一点? 还请告诉我我可以使用哪些其他可视化 api 来显示板球图表。

更新 - 示例

【问题讨论】:

  • 请参阅上面的更新部分。这里的点代表另一组数据。

标签: javascript java jquery google-visualization data-visualization


【解决方案1】:

使用ComboChart 组合线和散点系列,

请参阅以下工作 sn-p...

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

function drawChart() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'Overs');
  data.addColumn('number', 'Chargers - Runs');
  data.addColumn('number', 'Royals - Runs');
  data.addColumn('number', 'Chargers - Wickets');
  data.addColumn('number', 'Royals - Wickets');

  data.addRows([
    [0, 0, 0, null, null],
    [2, 22, 14, 18, null],
    [3, 30, 18, null, null],
    [4, 32, 35, null, 30],
    [5, 48, 60, 50, null],
    [6, 58, 72, null, 70]
  ]);

  var options = {
    chartArea: {
      top: 12,
      right: 12,
      bottom: 36,
      left: 24,
      height: '100%',
      width: '100%'
    },
    hAxis: {
      title: 'Overs'
    },
    legend: {
      position: 'none'
    },
    series: {
      0: {  // Chargers - Runs
        color: '#d32f2f'
      },
      1: {  // Royals - Runs
        color: '#1e88e5'
      },
      2: {  // Chargers - Wickets
        color: '#d32f2f',
        pointSize: 8,
        type: 'scatter'
      },
      3: {  // Royals - Wickets
        color: '#1e88e5',
        pointSize: 8,
        type: 'scatter'
      }
    },
    seriesType: 'line',
    vAxis: {
      title: 'Runs'
    }
  };

  var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
  chart.draw(data, options);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

【讨论】:

  • 会试试这个,如果有任何问题会告诉你,谢谢。
  • 这个问题好运吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多