【问题标题】:Google line chart data on daily basis with monthly labels带有每月标签的每日谷歌折线图数据
【发布时间】:2020-03-13 12:52:35
【问题描述】:

我有一个带有 3 条线的动画折线图。

小提琴:

https://jsfiddle.net/t5rxamd7/

我按月显示数据,例如 2020 年 12 月、2020 年 1 月等。如何显示每个月的多个值。目前我的对象是这样的

var chart_object = {"Dec 19": {monthLabel: "Dec", date: "30-Dec-2019", total: "42", cats: "0", dogs: "55", catspercentage: "0", dogsspercentage: "131"}, "Jan 20": {monthLabel: "Jan 2020", date: "", total: "", cats: "", dogs: ""}, "Feb 20": {monthLabel: "Feb", date: "", total: "", cats: "", dogs: ""}, "Mar 20": {monthLabel: "Mar", date: "", total: "", cats: "", dogs: ""}};

对于每个月,我不想显示总数,而是希望在不更改 x 轴的情况下每天显示它。 即,图表线应显示每日进度,但 x 轴仍应显示相同的标签。

我该怎么做?谁能帮我做这个?

提前致谢。

【问题讨论】:

  • 您可以将 x 轴更改为日期时间,但在 hAxis 上设置格式选项以显示月份(例如 'MMM yy'
  • @WhiteHat 能否请您编辑 jsfiddle 或提供代码?

标签: javascript charts google-visualization linechart


【解决方案1】:

首先,只需要包 --> 'corechart' -- 'bar' & 'line' 用于绘制材质图表

将 x 轴列更改为日期类型...

var chartData = new google.visualization.DataTable();
chartData.addColumn('date', 'Date');  <-- change to date

添加hAxis选项format: 'MMM yy'
删除 minValueviewWindowhAxis 选项
如果你想替换,它们需要是日期,而不是数字 (0)

hAxis: {
  format: 'MMM yy',  // <-- add
  //minValue: 0,  // <-- remove
  viewWindowMode: "explicit",
  //viewWindow: { min: 0 }, // <-- remove

使用new Date(date) 作为数据行中的第一个值,这里...

rawData.push([ new Date(date), total, {v: catscount, f: catspercentageAnnotation}, {v: dogscount, f: dogsspercentageAnnotation}]);

最后,当在 x 轴上使用日期时,使用月份格式,
x 轴标签将重复。
将需要构建自定义ticks

这里,我们使用getColumnRange来确定要添加多少ticks

  // build x-axis ticks to prevent repeated labels
  var dateRange = chartData.getColumnRange(0);
  var ticks = [];
  var dateTick = dateRange.min;
  while (dateTick.getTime() <= dateRange.max.getTime()) {
    ticks.push(dateTick);
    dateTick = new Date(dateTick.getFullYear(), dateTick.getMonth() + 2, 0);
  }
  options.hAxis.ticks = ticks;

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

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

function prepareChartData(){
  var chartData = new google.visualization.DataTable();
  chartData.addColumn('date', 'Date');
  chartData.addColumn('number', 'Total');
  chartData.addColumn('number', 'Dogs');
  chartData.addColumn('number', 'Cats');
  title = 'My Chart';

  var options = {
    title: title,
    curveType: 'function',
    legend: {position: 'bottom', alignment: 'start'},
    colors: ['#003f5c', '#ffa600', '#665191', '#f95d6a'],

    annotations: {
      alwaysOutside: true,
      textStyle: {
        color: 'black',
        fontSize: 11
      },
    },
    hAxis: {
      format: 'MMM yy',
      viewWindowMode: "explicit",
    },
    vAxis: {
      minValue: 0,
      viewWindowMode: "explicit",
      viewWindow: { min: 0 },
      title: ''
    },
    titleTextStyle: {
      color:'#3a3a3a',
      fontSize:24,
      bold:false
      // fontName: "Segoe UI"
      },
    bar: {groupWidth: '95%'},
    bars: 'horizontal'
  };

  var chartDivId = "chart_div";
  var chart = new google.visualization.LineChart(document.getElementById(chartDivId));
  var rawData =[];

  var chart_object = {"Dec 19": {monthLabel: "Dec", date: "30-Dec-2019", total: "42", cats: "0", dogs: "55", catspercentage: "0", dogsspercentage: "131"}, "Jan 20": {monthLabel: "Jan 2020", date: "31-Jan-2020", total: "0", cats: "0", dogs: "0"}, "Feb 20": {monthLabel: "Feb", date: "29-Feb-2020", total: "0", cats: "0", dogs: "0"}, "Mar 20": {monthLabel: "Mar", date: "31-Mar-2020", total: "0", cats: "0", dogs: "0"}};
  $.each(chart_object, function(i, chartobject) {
    date = chartobject.date;
    total = parseInt(chartobject.total);
    catscount = parseInt(chartobject.cats);
    dogscount = parseInt(chartobject.dogs);
    catspercentage = parseInt(chartobject.catspercentage);
    catspercentageAnnotation = catscount+",  percent "+catspercentage+"%";
    dogsspercentage = parseInt(chartobject.dogsspercentage);
    dogsspercentageAnnotation = dogscount+",  percent "+dogsspercentage+"%";

    rawData.push([ new Date(date), total, {v: catscount, f: catspercentageAnnotation}, {v: dogscount, f: dogsspercentageAnnotation}]);
  });

  var counter = 0;
  drawChart();

  function drawChart() {
    if(counter < rawData.length){
      chartData.addRow(rawData[counter]);

      // build x-axis ticks to prevent repeated labels
      var dateRange = chartData.getColumnRange(0);
      var ticks = [];
      var dateTick = dateRange.min;
      while (dateTick.getTime() <= dateRange.max.getTime()) {
        ticks.push(dateTick);
        dateTick = new Date(dateTick.getFullYear(), dateTick.getMonth() + 2, 0);
      }
      options.hAxis.ticks = ticks;

      chart.draw(chartData, options);
      counter++;
      window.setTimeout(drawChart, 1000);
    }
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

【讨论】:

  • 感谢它的工作。但我有一个问题。我在二月和三月约会。但是在 x 轴标签中,只显示了二月标签。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多