【问题标题】:Draw straight line on google bar chart (combo)在谷歌条形图上画直线(组合)
【发布时间】:2019-07-16 00:25:31
【问题描述】:

我一定会在我的一个项目中使用谷歌图表。我需要的是,显示一个条形图,在条形图中,一条与每个条相交的线代表另一个值。如果你看下面的jsfiddle,你会注意到折线图只与中间的条相交,并继续向前移动到其他条。

https://jsfiddle.net/ark7qbsc/

例如,如果您查看“Apples”,我会改为让该线在 y=2.5 处与整个条形(从开始到结束)相交并在条形内结束,而不是在空白处逗留,也不去其他酒吧。

谁能帮我解决这个问题(仅使用谷歌图表。)

我已经厌倦了在每个数据行之后注入空值,这至少会从空格中删除该行。但是,现在条形图的中心只有一个点。寻找一种将其扩展到整个条形宽度的方法。

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

        function drawVisualization() {
    // Some raw data (not necessarily accurate)
 var data = google.visualization.arrayToDataTable([
           ['Fruit', 'Jane', 'Average'],
           ['Apples', 3, 2.5],
           ['Oranges', 2, 1.5],
           ['Pears', 4, 3],
           ['Bananas', 3, 2],
           ['Plums', 4, 3]      
        ]);

        // Set chart options
        var options = {
           title : 'Fruits distribution',
           vAxis: {title: 'Fruits'},
           hAxis: {title: 'Person'},
           seriesType: 'bars',
           series: {1:{type: 'line'}}
        };

        // Instantiate and draw the chart.
        var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
        chart.draw(data, options);
  }

从头到尾似乎无法在条中包含一条线

【问题讨论】:

    标签: javascript charts google-visualization


    【解决方案1】:

    无法使用标准方法/选项,
    但我们可以在图表的就绪事件上绘制自定义线条。

    在行之间添加空值以换行。

     ['Fruit', 'Jane', 'Average'],
     ['Apples', 3, 2.5],
     [null, null, null],
     ['Oranges', 2, 1.5],
     [null, null, null],
    

    我们可以使用以下选项将条形拉近。

    bar: {
      groupWidth: '95%'
    },
    

    然后我们可以使用圆圈来放置自定义线。
    我们可以使用图表的布局界面来查找条形的宽度。

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

    google.charts.load('current', {
      packages: ['corechart']
    }).then(function () {
      var data = google.visualization.arrayToDataTable([
         ['Fruit', 'Jane', 'Average'],
         ['Apples', 3, 2.5],
         [null, null, null],
         ['Oranges', 2, 1.5],
         [null, null, null],
         ['Pears', 4, 3],
         [null, null, null],
         ['Bananas', 3, 2],
         [null, null, null],
         ['Plums', 4, 3]
      ]);
    
      var options = {
        bar: {
          groupWidth: '95%'
        },
        title : 'Fruits distribution',
        vAxis: {title: 'Fruits'},
        hAxis: {title: 'Person'},
        seriesType: 'bars',
        series: {1:{type: 'line'}}
      };
    
      var container = document.getElementById('chart_div');
      var chart = new google.visualization.ComboChart(container);
    
      google.visualization.events.addListener(chart, 'ready', function () {
        // get chart layout and svg
        var chartLayout = chart.getChartLayoutInterface();
        var svg = document.querySelector('#chart_div svg');
        var svgNS = svg.namespaceURI;
    
        // process each circle
        Array.prototype.forEach.call(container.getElementsByTagName('circle'), function(circle, index) {
          // find width of the bar
          var bounds = chartLayout.getBoundingBox('bar#0#' + (index * 2));
    
          // create line
          var line = document.createElementNS(svgNS, 'rect');
          line.setAttribute('x', parseFloat(circle.getAttribute('cx')) - (bounds.width / 2));
          line.setAttribute('y', parseFloat(circle.getAttribute('cy')));
          line.setAttribute('width', bounds.width);
          line.setAttribute('height', 1);
          line.setAttribute('stroke', circle.getAttribute('fill'));
          line.setAttribute('stroke-width', 2);
          line.setAttribute('fill', circle.getAttribute('fill'));
          circle.parentNode.appendChild(line);
        });
      });
    
      chart.draw(data, options);
    });
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div"></div>

    【讨论】:

    • 非常感谢,这真的很有帮助!我决定使用圆圈(而不是线条),但这确实有助于从概念上理解一些事情。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多