如何在没有绘图功能的情况下更改 google 图表背景颜色

How can i change google chart Background color without draw function

这里。我有基本的 google 图表。我想更改图表的背景颜色。 它与绘图功能配合得很好, 但问题是我只需要更改 google 图表颜色而无需使用数据或绘图功能重新渲染。

像这样

function changeColor(){
   gchart.backgroundColor='red';
}

而不是这个。

function changeColor(){
   chartOption.backgroundColor='red';
   gChart.draw([somearrayToDataTable], chartOption)
}

如果您想更改图表的配置选项之一并更新图表,
唯一的办法就是重新绘制图表。

否则,您必须手动更改图表生成的 SVG,
在图表的就绪事件上。

在这种情况下,背景颜色将设置在图表的主要 <rect> 元素上。
在 ready 事件上,我们可以使用原始颜色查找元素并更改 'fill' 属性。

设置与颜色相关的配置选项时,
图表会将任何命名的颜色转换为十六进制值。

'red' = #ff0000

图表还会将配置选项中使用的任何十六进制值转换为小写。

#FF0000 将变为#ff0000

为此,我们必须在配置选项中使用小写的 HEX 值。
例如

backgroundColor: '#008000',  // <-- green

然后在准备事件中,我们可以找到具有该颜色的元素并更改它...

google.visualization.events.addListener(chart, 'ready', function () {
  var rectangles = chart.getContainer().getElementsByTagName('rect');
  Array.prototype.forEach.call(rectangles, function(rect) {
    if (rect.getAttribute('fill') === options.backgroundColor) {
      rect.setAttribute('fill', '#ff0000');
    }
  });
});

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

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'x');
  data.addColumn('number', 'y')
  data.addRows([
    [0, 0],
    [1, 1],
    [2, 2],
    [3, 3]
  ]);

  var options = {
    backgroundColor: '#008000',  // <-- green
    colors: ['#00ffff']
  };

  var chart = new google.visualization.LineChart(document.getElementById('chart'));

  google.visualization.events.addListener(chart, 'ready', function () {
    var rectangles = chart.getContainer().getElementsByTagName('rect');
    Array.prototype.forEach.call(rectangles, function(rect) {
      if (rect.getAttribute('fill') === options.backgroundColor) {
        rect.setAttribute('fill', '#ff0000');  // <-- red
      }
    });
  });

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