【问题标题】:One x-axis tick every 7 points每 7 个点一个 x 轴刻度
【发布时间】:2017-01-04 17:27:00
【问题描述】:

area charts 中,我希望在 x 轴每 7 个点 上有一个刻度 + 标签,而不是每个点一个 x 轴刻度。如何在下面的代码中做到这一点?

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

  function drawChart() {
    var data = google.visualization.arrayToDataTable([
      ['Year', 'Sales', 'Expenses'],
      ['2013',  1000,      400],
      ['2014',  1170,      460],
      ['2015',  660,       1120],
      ['2016',  1030,      540]
    ]);

    var options = {
      title: 'Company Performance',
      hAxis: {title: 'Year',  titleTextStyle: {color: '#333'}},
      vAxis: {minValue: 0}
    };

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }

【问题讨论】:

  • 您可以通过hAxis.ticks 的选项来控制x 轴标签,它只需要一个数组——但是,此选项仅对连续 轴有效—— - 使用数据表第一列中的 numberdate 值创建 -- string 值,如示例中一样,创建一个discrete 轴,这也限制了其他选项 -- discrete-vs-continuous
  • 感谢@WhiteHat,你能发布一个代码示例吗?
  • 事实上我每天有 1 个点,我想要每 7 天一个 x 轴标签:1 月 1 日、1 月 8 日、1 月 15 日

标签: charts google-visualization


【解决方案1】:

使用hAxis.ticks 选项提供自定义x 轴 标签

该选项采用数组 [] 的值,
用于轴的相同类型(数据表中的第一列)
在这种情况下'date'

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

  • '12/07/2016' 以来的每一天都会添加一个点
  • 每 7 天添加一个刻度

google.charts.load('current', {
  callback: function () {
    drawChart();
    window.addEventListener('resize', drawChart, false);
  },
  packages:['corechart']
});

function drawChart() {
  var formatDate = new google.visualization.DateFormat({
    pattern: 'MMM d'
  });

  var dataTable = new google.visualization.DataTable();
  dataTable.addColumn('date', 'Day');
  dataTable.addColumn('number', 'Y');
  dataTable.addColumn({role: 'style', type: 'string'});

  var oneDay = (1000 * 60 * 60 * 24);
  var startDate = new Date(2016, 11, 7);
  var endDate = new Date();
  var ticksAxisH = [];
  for (var i = startDate.getTime(); i < endDate.getTime(); i = i + oneDay) {
    // set row date
    var rowDate = new Date(i);
    var xValue = {
      v: rowDate,
      f: formatDate.formatValue(rowDate)
    };

    // y = 2x - 8
    var yValue = (2 * ((i - startDate.getTime()) / oneDay) - 8);

    dataTable.addRow([
      xValue,
      yValue,
      'point {fill-color: #003eff;}, line {stroke-color: #003eff;}'
    ]);

    // add tick every 7 days
    if (((i - startDate.getTime()) % 7) === 0) {
      ticksAxisH.push(xValue);
    }
  }

  var container = document.getElementById('chart_div');
  var chart = new google.visualization.AreaChart(container);
  chart.draw(dataTable, {
    colors: ['#e6f4f9'],
    areaOpacity: 1.0,
    hAxis: {
      gridlines: {
        color: '#f5f5f5'
      },
      ticks: ticksAxisH
    },
    legend: 'none',
    pointSize: 4,
    vAxis: {
      gridlines: {
        color: '#f5f5f5'
      }
    },
  });
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

【讨论】:

  • 非常感谢!最后一件事:如何使网格线更小(仅1px)和更轻,并且每个点都有一个圆点like in Google Analytics?最后一件事:我们能否删除正确的--- Y 图例。 PS:这是一个即将推出的 MIT 开源项目。我将开始赏金以提供积分以感谢您!
  • 再次感谢@WhiteHat。最后一件事:我在文档中没有找到如何将“区域颜色”更改为#e6f4f9,你有什么想法吗? PS:我可以引用你作为 README.md 的贡献者吗?
  • 我想为线+点保留原始的深蓝色,而这种浅蓝色仅用于曲线下的区域,知道@WhiteHat吗? (我怎么能引用你,你有github用户名吗?mine is here)。
  • 再次更改了答案——区域的颜色与线 + 点不同,需要在数据表中添加 'style' 列——请参阅新列的值,它负责处理线 +点 -- 原始 colors 选项提供区域颜色 -- 默认情况下,图表限制了 areaOpacity,这就是为什么浅蓝色更早的原因 -- 为 areaOpacity: 1.0 添加了选项
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2020-08-21
相关资源
最近更新 更多