【问题标题】:Google halfdonut pie chart: is it possible to set total percentage?谷歌半甜甜圈饼图:可以设置总百分比吗?
【发布时间】:2026-01-25 21:10:01
【问题描述】:

我用 Google 图表制作了半个甜甜圈图表,但我遇到的问题是可见百分比的总和等于 50%。有没有可能的解决方案?

Image of my chart

【问题讨论】:

  • 我正在考虑将 porcentage 设为 200%

标签: google-visualization pygooglechart


【解决方案1】:

您可以使用以下配置选项覆盖切片上显示的文本...

pieSliceText: 'value'

然后在数据中,将单元格的格式化值设置为正确的百分比...

var data = [
  ['Task', 'Hours'],

  // use formatted values
  ['A', {v: 19.2, f: '38.4%'}],
  ['B', {v: 30.8, f: '61.6%'}],

  [null, 50]
];

下面的工作 sn-p 使用相同的方法,
计算正确的百分比,
而不是硬编码...

google.charts.load('current', {
  callback: function () {
    var data = [
      ['Task', 'Hours'],
      ['A',  19.2],
      ['B',  30.8],
      [null, 50.0]
    ];

    var total = 0;
    for (var i = 1; i < data.length; i++) {
      if (data[i][0] !== null) {
        total += data[i][1];
      }
    }

    var numberFormat = new google.visualization.NumberFormat({
      pattern: '#,##0.0',
      suffix: '%'
    });

    var dataTable = google.visualization.arrayToDataTable(data);
    for (var i = 0; i < dataTable.getNumberOfRows(); i++) {
      if (dataTable.getValue(i, 0) !== null) {
        dataTable.setFormattedValue(i, 1, numberFormat.formatValue(((dataTable.getValue(i, 1) / total) * 100)));
      }
    }

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

    var options = {
      height: 400,
      chartArea: {
        top: 24
      },
      colors: ['#8BC34A', '#64B5F6'],
      legend: 'none',
      pieHole: 0.4,
      pieStartAngle: 270,
      pieSliceText: 'value',
      slices: {
        2: {
          color: 'transparent'
        }
      },
      theme: 'maximized',
      width: 400
    };

    chart.draw(dataTable, options);
  },
  packages: ['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

【讨论】:

  • 我现在正面临这个问题。我的问题是因为我有动态数据。你有什么建议吗?
  • 建好数据表后可以通过setFormattedValue方法使用上述方法。