Google Charts - hAxis 上的数字/字符串问题(Jquery ajax JSON 数据)

Google Charts - number/string issue on hAxis (Jquery ajax JSON data)

本文关键字:Jquery 问题 ajax JSON 数据 字符串 Charts hAxis 数字 Google      更新时间:2023-09-26

我想做什么

我正在尝试使用Google图表在"组合图表"中显示MySQL数据库中的数据。为了做到这一点,我遵循了本教程,进行了一些更改,并提出了本文底部所示的代码。

实际行为

数据显示正确。然而,我必须告诉谷歌图表,"年"是一个数字,使它进入连续的"模式"。这导致 hAxis 上的年份以小数位显示,特别是如果我没有所有连续年份的数据。(即 2,010.5)

期望的行为

我希望谷歌图表像字符串一样显示年份,并以离散的"模式"运行。

我认为问题是什么

我认为我遇到的问题主要是由于年份(要在 hAxis 上显示)是数据库中的 int(11),并且控制器提供的 json 也将年份作为数字。为了在下面澄清一个 json 可能是什么样子的示例:

[
    {
        "year_data": 2010,
        "data_1": 125895,
        "data_2": 25158.5
    }
]

由于我将控制器用于一堆其他事情,因此我最好不要对其进行任何更改。

我试图修复它

  • 我尝试了将data.addColumn('number', 'year_data');更改为data.addColumn('string', 'year_data');的大胆举动。它不起作用,我得到了"类型不匹配"。
  • 我试图想出一种解决方法,主要涉及hAxis.showTextEvery:和某种行数。它没有用,但这很可能是由于我缺乏经验/知识。

一句话中的问题

如何在 JavaScript 中将年份数据转换为字符串,或者让 Google 图表表现得像字符串一样?

法典

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script>
<script src="/googlecharts/ajaxGetPost.js" type="text/javascript"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script>
function charts(data, ChartType) {
    var jsonData = data;
    google.load("visualization", "1", {
        packages: ["corechart"],
        callback: drawVisualization
    });
    function drawVisualization() {
        var data = new google.visualization.DataTable();
        data.addColumn('number', 'year_data');
        data.addColumn('number', 'Data 1');
        data.addColumn('number', 'Data 2');
        $.each(jsonData, function(i, jsonData) {
            var year = jsonData.year_data;
            var data1 = jsonData.data_1;
            var data2 = jsonData.data_2;
            data.addRows([
                [year, data1, data2]
            ]);
        });
        var options = {
            colorAxis: {
                colors: ['#54C492', '#cc0000']
            },
            datalessRegionColor: '#dedede',
            defaultColor: '#dedede',
            legend: {
                position: 'bottom',
                alignment: 'start'
            },
            seriesType: 'bars',
            series: {
                1: {
                    type: 'line'
                }
            }
        };
        var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    }
}
$(document).ready(function() {
    url = '/data/get';
    ajax_data('GET', url, function(data) {
        charts(data)
    });
});
</script>

toString应该可以正常工作,请参阅以下代码片段...

var data = new google.visualization.DataTable();
data.addColumn('string', 'year_data');
data.addColumn('number', 'Data 1');
data.addColumn('number', 'Data 2');
$.each(jsonData, function(i, jsonData) {
    var year = jsonData.year_data.toString();
    var data1 = jsonData.data_1;
    var data2 = jsonData.data_2;
    data.addRows([
        [year, data1, data2]
    ]);
});