【问题标题】:Hide annotations in google bar chart在谷歌条形图中隐藏注释
【发布时间】:2020-08-20 19:49:01
【问题描述】:

我正在显示一个基于数组数组的谷歌条形图。它目前显示所有带有注释的值。如何隐藏 0 值并在条内显示注释并删除词干。我正在使用的数据是动态的,所以如果我可以创建函数来检查 0 并在数据视图中用 null 替换,但我仍然需要 stringify 来显示注释。

 <script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
res=[["Bob",80,0,0],["tom",0,60,0]]
google.charts.load("current", {packages:["corechart"]});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
tmp=[['Name','percent1','percent2','percent3']].concat(res)
console.log(tmp)
var data = google.visualization.arrayToDataTable(tmp);
var view = new google.visualization.DataView(data);
view.setColumns([0, 1,
                       { calc: "stringify",
                         sourceColumn: 1,
                         type: "string",
                         role: "annotation" },
                       2,
                       { calc: "stringify",
                         sourceColumn: 2,
                         type: "string",
                         role: "annotation" },
                        3,{ calc: "stringify",
                         sourceColumn: 3,
                         type: "string",
                         role: "annotation" },
                       ]);

var options = {
          chart: {
            title: chartTitle,
            
          },
          bars: 'horizontal',
          bar: {groupWidth: "95%"},
        };
var chart = new google.visualization.BarChart(document.getElementById(chartName));
chart.draw(view, options);

【问题讨论】:

    标签: javascript charts google-visualization


    【解决方案1】:

    我们可以提供自己的函数,而不是使用 stringify 函数。
    如果值为零,则返回 null。如果非零,则返回格式化值...

      calc: function (dt, row) {
        var val = dt.getValue(row, 1);
        if (val !== 0) {
          return dt.getFormattedValue(row, 1);
        } else {
          return null;
        }
      },
    

    对于系列列,同样,只返回实际值。
    所以我们不包含列索引,而是使用相同的 calc 函数。

      calc: function (dt, row) {
        var val = dt.getValue(row, 1);
        if (val !== 0) {
          return val;
        } else {
          return null;
        }
      },
      type: data.getColumnType(1),
      label: data.getColumnLabel(1)
    

    例如

    var view = new google.visualization.DataView(data);
    view.setColumns([0, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 1);
        if (val !== 0) {
          return val;
        } else {
          return null;
        }
      },
      type: data.getColumnType(1),
      label: data.getColumnLabel(1)
    }, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 1);
        if (val !== 0) {
          return dt.getFormattedValue(row, 1);
        } else {
          return null;
        }
      },
      type: "string",
      role: "annotation"
    }, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 2);
        if (val !== 0) {
          return val;
        } else {
          return null;
        }
      },
      type: data.getColumnType(2),
      label: data.getColumnLabel(2)
    }, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 2);
        if (val !== 0) {
          return dt.getFormattedValue(row, 2);
        } else {
          return null;
        }
      },
      type: "string",
      role: "annotation"
    }, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 3);
        if (val !== 0) {
          return val;
        } else {
          return null;
        }
      },
      type: data.getColumnType(3),
      label: data.getColumnLabel(3)
    }, {
      calc: function (dt, row) {
        var val = dt.getValue(row, 3);
        if (val !== 0) {
          return dt.getFormattedValue(row, 3);
        } else {
          return null;
        }
      },
      type: "string",
      role: "annotation"
    }]);
    

    如果您不想重复所有列定义,
    您可以根据数据表中的列动态构建...

    var columns = [0];
    for (var i = 1; i < data.getNumberOfColumns(); i++) {
      addColumn(i);
    }
    
    var view = new google.visualization.DataView(data);
    view.setColumns(columns);
    
    function addColumn(index) {
      columns.push({
        calc: function (dt, row) {
          var val = dt.getValue(row, index);
          if (val !== 0) {
            return val;
          } else {
            return null;
          }
        },
        type: data.getColumnType(index),
        label: data.getColumnLabel(index)
      });
      columns.push({
        calc: function (dt, row) {
          var val = dt.getValue(row, index);
          if (val !== 0) {
            return dt.getFormattedValue(row, index);
          } else {
            return null;
          }
        },
        type: "string",
        role: "annotation"
      });
    }
    

    【讨论】:

    • 希望这有助于注释放置。您的图表需要留出足够的空间让注释出现在条形图内。您可以尝试annotations 选项并减少字体等,但没有选项可以强制进入栏。如果您需要更多帮助,请提供数据样本...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2012-12-01
    • 1970-01-01
    • 2016-03-19
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多