javascript - 谷歌图表改变单个直方图数据点的颜色

标签 javascript html charts google-visualization mutation-observers

我有以下代码(请参阅 codepen),它允许我在绘制图表后更改每个直方图数据点的颜色。它按预期工作。但是,当用户将鼠标悬停在数据点上时,颜色会变得困惑。这是怎么回事,我该如何解决?

google.charts.load('current', {packages:['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var rawData = [
    ['Dinosaur', 'Length', 'color'],
    ['Acrocanthosaurus (top-spined lizard)', 12.2, 'red'],
    ['Albertosaurus (Alberta lizard)', 9.1, 'green'],
    ['Allosaurus (other lizard)', 12.2, 'green'],

  ];

  // sort data by 'Length'
  var data = google.visualization.arrayToDataTable(rawData);
  data.sort([{column: 1}]);

  

  var options = {
    
    title: 'Lengths of dinosaurs, in meters',
    legend: { position: 'none' },
    
  };

  var container = document.getElementById('chart_div');
  var chart = new google.visualization.Histogram(container);

  google.visualization.events.addListener(chart, 'ready', function () {
    var observer = new MutationObserver(function () {
      var index = 0;
      var item = 1;
      Array.prototype.forEach.call(container.getElementsByTagName('rect'), function (rect) {
        
          if (rect.getAttribute('fill') === '#3366cc') {
            rect.setAttribute('fill', rawData[item][2]);
            item++
          }
          
          index++;
        
      });
    });
    observer.observe(container, {
      childList: true,
      subtree: true
    });
  });

  chart.draw(data, options);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

最佳答案

在观察者中,需要检查所有颜色...

    switch (rect.getAttribute('fill')) {
      case '#3366cc':
      case 'red':
      case 'green':
        rect.setAttribute('fill', rawData[item][2]);
        item++
        break;
    }

请参阅以下工作片段...

google.charts.load('current', {
  packages:['corechart']
}).then(function drawChart() {
  var rawData = [
    ['Dinosaur', 'Length', 'color'],
    ['Acrocanthosaurus (top-spined lizard)', 12.2, 'red'],
    ['Albertosaurus (Alberta lizard)', 9.1, 'green'],
    ['Allosaurus (other lizard)', 12.2, 'green'],
  ];

  // sort data by 'Length'
  var data = google.visualization.arrayToDataTable(rawData);
  data.sort([{column: 1}]);

  var options = {
    title: 'Lengths of dinosaurs, in meters',
    legend: { position: 'none' },
  };

  var container = document.getElementById('chart_div');
  var chart = new google.visualization.Histogram(container);

  google.visualization.events.addListener(chart, 'ready', function () {
    var observer = new MutationObserver(function () {
      var index = 0;
      var item = 1;
      Array.prototype.forEach.call(container.getElementsByTagName('rect'), function (rect) {
        switch (rect.getAttribute('fill')) {
          case '#3366cc':
          case 'red':
          case 'green':
            rect.setAttribute('fill', rawData[item][2]);
            item++
            break;
        }
        index++;
      });
    });
    observer.observe(container, {
      childList: true,
      subtree: true
    });
  });

  chart.draw(data, options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

关于javascript - 谷歌图表改变单个直方图数据点的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64581682/

相关文章:

c# - 与图表控件的数据绑定(bind)给出 NotImplementedException

charts - 如何为谷歌图表的x轴赋予样式?

c# - 如何遍历 ChartColorPalette 属性并添加到列表?

javascript - 比较表中一列的参与者并与另一列求和,js

javascript - ng-options 不会预先选择一个选项

javascript - 了解函数如何使用和存储变量

html - 如何将文本环绕在右下角的 div 周围?

javascript - 在 JavaScript 中并行播放相同的 HTML5 音频

javascript - 如何根据用户从 - 选择下拉菜单中所做的选择启用/禁用和更改某些链接的颜色 -

jquery - 将 div 高度设置为与背景宽度成比例