【问题标题】:Google Chart columnChart haxis dates are wrong谷歌图表列图表轴日期错误
【发布时间】:2021-10-30 17:32:47
【问题描述】:

我有一个谷歌图表(柱形图)显示单个日期(2010 年 1 月 = 2010 年 1 月 1 日)列 - 但生成的列似乎从 09 年 7 月 1 日到 10 年 7 月 1 日(请注意,这似乎会根据屏幕的宽度而变化);我该如何解决这个问题,以便该列仅位于 2010 年 1 月 1 日的日期? (**注意,日期/值是可变的,可以包含一个或数百个列值,因此我们不能简单地对其进行硬编码或将列类型从“日期”更改为“字符串”)。

  var arr = eval("[[new Date(2010, 0, 1), 0,1]]");
  var data = new google.visualization.DataTable();

  data.addColumn('date', 'Dt');
  data.addColumn('number', 'Open');
  data.addColumn('number', 'Closed');
  data.addRows(arr);

  var options_stacked = {
    isStacked: true,
    height: 300,
    colors: ['#111', '#a00'],
    hAxis: {
     slantedText: false,
     format: 'd/MMM/yy',
    },
    legend: {
      position: 'top',
    },
    vAxis: {
    minValue: 0
  }
};

var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options_stacked);

可以在https://jsfiddle.net/Abeeee/d5fojtp2/34/上找到演示者

【问题讨论】:

    标签: javascript charts google-visualization


    【解决方案1】:

    您可以添加自定义刻度以确保每列“位于”正确的日期。

    ticks 选项需要一个值数组。
    我们可以使用 DataTable 方法 --> getDistinctValue(colIndex)
    从数据表中返回日期值。

    var xTicks = data.getDistinctValues(0);
    
    hAxis: {
      slantedText: false,
      format: 'd.MMM.yy',      <---- changed from 'd/MMM/yy' to avoid line breaks
      ticks: xTicks
    },
    

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

    function doTest() {
      var arr = eval("[[new Date(2010, 0, 1), 0,1]]");
      var data = new google.visualization.DataTable();
    
      data.addColumn('date', 'Dt');
      data.addColumn('number', 'Open');
      data.addColumn('number', 'Closed');
      data.addRows(arr);
      
      var xTicks = data.getDistinctValues(0);
    
      var options_stacked = {
        isStacked: true,
        height: 300,
        colors: ['#111', '#a00'],
        hAxis: {
          slantedText: false,
          format: 'd/MMM/yy',
          ticks: xTicks
        },
        legend: {
          position: 'top',
        },
        vAxis: {
          minValue: 0
        }
      };
    
      var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
      chart.draw(data, options_stacked);
    }
    
    window.addEventListener('resize', doTest);
    
    google.charts.load('current', {
      packages: ['corechart', 'bar']
    });
    google.charts.setOnLoadCallback(doTest);
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    
    <h1>Google Charts</h1>
    <div id="chart_div"></div>

    【讨论】:

    • 感谢 WH - 这改进了事情 - 但标签现在分为 1-3 行而不是 1 行(注意我不想要倾斜的标签)。请参阅 jsfiddle.net/Abeeee/aduwfksq/1 以获取更大的解决方案数据集演示。 (有趣的是,如果我将格式从 'd/MMM/yy' 更改为 'd.MMM.yy',我可以获得 1 个行标签 - 但这并不理想。
    • 这是一场失败的战斗,有那么多列,不可能一一显示标签,尤其是在没有倾斜的情况下。您可以尝试减小字体大小等,但您需要决定显示几列时的显示效果,而不是几列。然后使用 if 语句或其他东西来应用,跟随?
    • 我认为仅显示一列时轴标签存在错误,但我找不到演示的问题,我只记得使用 ticks 是唯一的解决方法。
    • 好的 - 我会接受这个 - 我已经编辑了您的答案以包含修改后的(“工作”)标签格式,并将其标记为解决方案。谢谢(也许谷歌会在一段时间内修复他们的代码!!:-s)
    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多