【问题标题】:Google chart adding unwanted time intervals谷歌图表添加不需要的时间间隔
【发布时间】:2019-06-18 05:33:31
【问题描述】:

我正在使用谷歌折线图来显示一些细节。 x轴是DateTime格式,下面是数据,

如您所见,有两个日期从 3 月开始,其他详细信息从 5 月开始。

生成的折线图如下,

在 X 轴上有额外的 Apri 归档,因此图表直截了当,我想删除这个 4 月并仅显示相关的时间流逝。有什么方法可以删除或隐藏不包含任何值的月份?

我的代码:

function SalesbyDay() {

    $.ajax({
        type: 'POST',
        url: 'ChartDemo.aspx/SalesbyDay',
        dataType: 'json',
        data: '{"pageSession":"' + $("#hdnPageSession").val() + '"}',
        contentType: 'application/json',
        success: function (data) {
            dataValues = data.d;

            var data = new google.visualization.DataTable();
            data.addColumn('datetime', 'date');
            data.addColumn('number', 'SalesValue');

            var mindate = eval(dataValues[0].date.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
            var maxdate = eval(dataValues[dataValues.length - 1].date.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

            for (var i = 0; i < dataValues.length; i++) {

                var sdate = dataValues[i].date;
                var newDate = eval(sdate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
                data.addRow([
                    newDate,
                    dataValues[i].SalesValue
                ]);
            }

            var chart = new google.visualization.LineChart(document.getElementById('chartdiv2'));
            var options = {
                legend: { position: 'top', alignment: 'start' },
                hAxis: {
                    viewWindow: {
                        min: mindate,
                        max: maxdate
                    },
                    gridlines: {
                        count: -1,
                        units: {
                            days: { format: ['MMM dd'] },
                            hours: { format: ['HH:mm', 'ha'] },
                        }
                    },
                    minorGridlines: {
                        units: {
                            hours: { format: ['hh:mm:ss a', 'ha'] },
                            minutes: { format: ['HH:mm a Z', ':mm'] }
                        }
                    }
                },
            };
            chart.draw(data, options);
        }
    });
}

请帮忙。

【问题讨论】:

    标签: c# charts google-visualization


    【解决方案1】:

    我们可以使用ticks 选项仅显示我们想要显示的标签。
    我们可以从数据中得到一个唯一的日期列表,
    带数据表法 --> getDistinctValues

    ticks: data.getDistinctValues(0),
    

    但是,由于我们使用的是连续轴(日期),
    轴的范围将保持不变,只有标签会改变。

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

    google.charts.load('current', {
        packages: ['corechart']
    }).then(function () {
        var data = new google.visualization.DataTable();
        data.addColumn('datetime', 'date');
        data.addColumn('number', 'SalesValue');
        data.addRows([
          [new Date(2019, 2, 5, 0, 31, 44), 500],
          [new Date(2019, 2, 7, 23, 40, 53), 50],
          [new Date(2019, 4, 21, 6, 27, 43), 50],
          [new Date(2019, 4, 22, 1, 47, 42), 50],
          [new Date(2019, 4, 22, 2, 50, 29), 50],
          [new Date(2019, 4, 23, 0, 0, 52), 50],
          [new Date(2019, 4, 23, 0, 15, 42), 50],
          [new Date(2019, 4, 23, 4, 26, 39), 50],
          [new Date(2019, 4, 27, 6, 20, 20), 25],
          [new Date(2019, 4, 27, 6, 20, 49), 100],
          [new Date(2019, 4, 27, 6, 22, 38), 20],
          [new Date(2019, 4, 27, 18, 11, 37), 500],
        ]);
    
        var dateRange = data.getColumnRange(0);
        var mindate = dateRange.min;
        var maxdate = dateRange.max;
    
        var chart = new google.visualization.LineChart(document.getElementById('chartdiv2'));
        var options = {
            legend: { position: 'top', alignment: 'start' },
            hAxis: {
                viewWindow: {
                    min: mindate,
                    max: maxdate
                },
                ticks: data.getDistinctValues(0),
                gridlines: {
                    count: -1,
                    units: {
                        days: { format: ['MMM dd'] },
                        hours: { format: ['HH:mm', 'ha'] },
                    }
                },
                minorGridlines: {
                    units: {
                        hours: { format: ['hh:mm:ss a', 'ha'] },
                        minutes: { format: ['HH:mm a Z', ':mm'] }
                    }
                }
            },
        };
        chart.draw(data, options);
    });
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chartdiv2"></div>

    我们可以使用离散轴(字符串),
    仅显示我们数据中的日期。

    在下面的sn-p中,
    带有计算列的DataView 用于将日期转换为字符串...

    google.charts.load('current', {
        packages: ['corechart']
    }).then(function () {
        var data = new google.visualization.DataTable();
        data.addColumn('datetime', 'date');
        data.addColumn('number', 'SalesValue');
        data.addRows([
          [new Date(2019, 2, 5, 0, 31, 44), 500],
          [new Date(2019, 2, 7, 23, 40, 53), 50],
          [new Date(2019, 4, 21, 6, 27, 43), 50],
          [new Date(2019, 4, 22, 1, 47, 42), 50],
          [new Date(2019, 4, 22, 2, 50, 29), 50],
          [new Date(2019, 4, 23, 0, 0, 52), 50],
          [new Date(2019, 4, 23, 0, 15, 42), 50],
          [new Date(2019, 4, 23, 4, 26, 39), 50],
          [new Date(2019, 4, 27, 6, 20, 20), 25],
          [new Date(2019, 4, 27, 6, 20, 49), 100],
          [new Date(2019, 4, 27, 6, 22, 38), 20],
          [new Date(2019, 4, 27, 18, 11, 37), 500],
        ]);
    
        var formatDate = new google.visualization.DateFormat({
          pattern: 'MMM dd'
        });
        var formatTime = new google.visualization.DateFormat({
          pattern: 'HH:mm'
        });
    
        var view = new google.visualization.DataView(data);
        view.setColumns([{
          calc: function (dt, row) {
            var rowDate1 = formatDate.formatValue(dt.getValue(row, 0));
            var rowDate2 = null;
            if (row > 0) {
              rowDate2 = formatDate.formatValue(dt.getValue(row - 1, 0));
            }
            if (rowDate1 === rowDate2) {
              rowDate1 = formatTime.formatValue(dt.getValue(row - 1, 0));
            }
            return rowDate1;
          },
          label: data.getColumnLabel(0),
          type: 'string'
        }, 1]);
    
        var dateRange = data.getColumnRange(0);
        var mindate = dateRange.min;
        var maxdate = dateRange.max;
    
        var chart = new google.visualization.LineChart(document.getElementById('chartdiv2'));
        var options = {
            legend: { position: 'top', alignment: 'start' }
        };
        chart.draw(view, options);
    });
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chartdiv2"></div>

    注意上述结果是均匀分布的标签,
    不相关的时间流逝。
    并且用于hAxis 的原始选项对离散轴无效。

    不要认为使用谷歌图表可以得到你想要的东西......

    【讨论】:

    • 这个问题好运吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多