带有注释角色的Google图表问题:true使动态无法使用DataView正常工作 [英] google charts issue with annotation role :true make dynamic not working using dataview

查看:48
本文介绍了带有注释角色的Google图表问题:true使动态无法使用DataView正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何在外部使用真正的注释在每列上添加标签,因为动态添加会在每一列上定价.

How can I add labels on every column using annotations true outside as add dynamically get a price on every column.

我想在每个列上使用$ sign作为价格实现标签. 我尝试使用数据视图,但只能使用数据视图获取静态方式.

I want to implement label on every column as price with $sign . I try with data view but only get static way using data view.

我该怎么办?您能给我一些提示或实施动态方式吗?

How can I do it can u suggests me some hint or implement dynamic way possible ?

google.charts.load('current', {
  packages: ['corechart']
  }).then(function () {
  var charts = {};
  var options = {
    Column: {
      chartArea: {
        height: '100%',
        width: '100%',
        top: 24,
        left: 64,
        right: 32,
        bottom: 48,
      },
      'vAxis': { 
        title: 'Cost in USD ($)', format:'$#',
      },
      height: '100%',
      legend: {
        position: 'bottom'
      },
      width: '100%'
    }
    };
  //  columns charts data
var jsonData = [["product1",450],["product2",23],["product3",1008.0],["product4",1008.0],["product",108.0],["product7",1008.0],["product4",10.0],["product6",10.0],["product9",10.0],["product5",108.0],["product10",1.0]];
  loadData(jsonData, '1', 'Column');
  
  // load json data
  function loadData(jsonData, id, chartType) {
    // create data table
    var dataTable = new google.visualization.DataTable();
  
       // add date column
       dataTable.addColumn('string', 'Category');
       var rowIndex = dataTable.addRow();
       dataTable.setValue(rowIndex, 0, dataTable.getColumnLabel(0));
       $.each(jsonData, function(productIndex, product) {
        var colIndex = dataTable.addColumn('number', product[0]);
          // add product data
          dataTable.setValue(rowIndex, colIndex, product[1]);
        });
         // draw chart
    $(window).resize(function () {
      drawChart(id, dataTable);
    });
    drawChart(id, dataTable);
  }
  
  
   
   
    function getDataView(dataTable) {
    var dataView;
    var viewColumns = [];

    for (var i = 0; i < dataTable.getNumberOfColumns(); i++) {
      addViewColumn(i);
    }

    function addViewColumn(index) {
      viewColumns.push(index);
      if (index > 0) {
        viewColumns.push({
           calc: function (dt, row) {
           return dt.getFormattedValue(row, index) ;
          },
           sourceColumn: index,
             type: 'string',
             role: 'annotation'
        });
      }
    }

    dataView = new google.visualization.DataView(dataTable);
    dataView.setColumns(viewColumns);
    return dataView;
  }
  

 
  var formatter = new google.visualization.NumberFormat(
    {prefix: '$'});
  formatter.format(dataTable);
  // draw chart
 function drawChart(id, dataTable) {
  
    if (!charts.hasOwnProperty(id)) {
     
      charts[id] = new google.visualization.ChartWrapper({
        chartType: 'Column' + 'Chart',
        containerId: 'chart-' + id,
        options:  {
        'vAxis': { 
          title: 'Cost in USD ($)', format:'$#',
        }, 
         width: '100%',
         height: '100%',
         legend: {
        position: 'bottom'
      },
    },
      });
    }
   var view = getDataView(dataTable);
    charts[id].setDataTable(view);
    charts[id].draw(view.toDataTable(),options);
  }
});

html, body {
  height: 100%;
  margin: 0px 0px 0px 0px;
  overflow: hidden;
  padding: 0px 0px 0px 0px;
}

.chart {
  height: 100%;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://www.gstatic.com/charts/loader.js"></script>
<div class="chart" id="chart-1"></div>

推荐答案

使用视图绘制图表

尝试更改...

charts[id].setDataTable(dataTable);

到...

charts[id].setDataTable(view);

编辑

以确保视图可以访问数据表,
drawChart函数中创建视图...

to ensure the view has access to the data table,
create the view in the drawChart function...

function drawChart(id, dataTable) {
  if (!charts.hasOwnProperty(id)) {
    charts[id] = new google.visualization.ChartWrapper({
      chartType: 'Column' + 'Chart',
      containerId: 'chart-' + id,
      options:  {
      'vAxis': { 
        title: 'Cost in USD ($)', format:'$#',
      }, 
       width: '100%',
       height: '100%',
       legend: {
          position: 'bottom'
        },
      },
    });
  }

  var view = new google.visualization.DataView(dataTable);
  view.setColumns([0,
    1,
    {
      calc: "stringify",
      sourceColumn: 1,
      type: "string",
      role: "annotation"
    },
    2,
    {
      calc: "stringify",
      sourceColumn: 2,
      type: "string",
      role: "annotation"
    },

  ]);

  charts[id].setDataTable(view);
  charts[id].draw(view, options);
}

编辑2

在绘制图表包装程序时,不应将任何参数传递给draw函数.
仅限常规图表

no arguments should be passed to the draw function when drawing a chart wrapper
that's only for a regular chart

charts[id].draw(view.toDataTable(),options);

应该是...

charts[id].draw();

请参阅以下工作摘要...

see following working snippet...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var charts = {};
  var options = {
    Column: {
      chartArea: {
        height: '100%',
        width: '100%',
        top: 24,
        left: 64,
        right: 32,
        bottom: 48,
      },
      'vAxis': {
        title: 'Cost in USD ($)', format:'$#',
      },
      height: '100%',
      legend: {
        position: 'bottom'
      },
      width: '100%'
    }
    };
  //  columns charts data
  var jsonData = [["product1",450],["product2",23],["product3",1008.0],["product4",1008.0],["product",108.0],["product7",1008.0],["product4",10.0],["product6",10.0],["product9",10.0],["product5",108.0],["product10",1.0]];
  loadData(jsonData, '1', 'Column');

  // load json data
  function loadData(jsonData, id, chartType) {
    // create data table
    var dataTable = new google.visualization.DataTable();

       // add date column
       dataTable.addColumn('string', 'Category');
       var rowIndex = dataTable.addRow();
       dataTable.setValue(rowIndex, 0, dataTable.getColumnLabel(0));
       $.each(jsonData, function(productIndex, product) {
        var colIndex = dataTable.addColumn('number', product[0]);
          // add product data
          dataTable.setValue(rowIndex, colIndex, product[1]);
        });
         // draw chart
    $(window).resize(function () {
      drawChart(id, dataTable);
    });
    drawChart(id, dataTable);
  }




    function getDataView(dataTable) {
    var dataView;
    var viewColumns = [];

    for (var i = 0; i < dataTable.getNumberOfColumns(); i++) {
      addViewColumn(i);
    }

    function addViewColumn(index) {
      viewColumns.push(index);
      if (index > 0) {
        viewColumns.push({
           calc: function (dt, row) {
           return dt.getFormattedValue(row, index) ;
          },
           sourceColumn: index,
             type: 'string',
             role: 'annotation'
        });
      }
    }

    dataView = new google.visualization.DataView(dataTable);
    dataView.setColumns(viewColumns);
    return dataView;
  }

  var formatter = new google.visualization.NumberFormat({prefix: '$'});
  formatter.format(dataTable);

  function drawChart(id, dataTable) {
    if (!charts.hasOwnProperty(id)) {
      charts[id] = new google.visualization.ChartWrapper({
        chartType: 'ColumnChart',
        containerId: 'chart-' + id,
        options:  {
          vAxis: {
            title: 'Cost in USD ($)',
            format: '$#',
          },
          width: '100%',
          height: '100%',
          legend: {
            position: 'bottom'
          },
        },
      });
    }
    var view = getDataView(dataTable);
    charts[id].setDataTable(view);
    charts[id].draw();
  }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart-1"></div>

这篇关于带有注释角色的Google图表问题:true使动态无法使用DataView正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆