谷歌图表不同的颜色与单系列材料条形图

时间:2015-06-22 19:55:23

标签: charts google-visualization

使用{role:'style'}我可以将不同颜色应用于单个系列条形图。但如果我使用新的谷歌“材料”条形图,我不能。

“常规”Google图表(作品):

google.load("visualization", '1.1', {packages:['corechart']});
google.setOnLoadCallback(drawChart);

function drawChart() {

   var data = google.visualization.arrayToDataTable([
       ['Element', 'Density', {role: 'style'} ],
       ['Copper', 8.94, 'color: #FF9900'],
       ['Silver', 10.49,'color: #109618'],
       ['Gold', 19.30,'color: #3B3EAC'],
       ['Platinum', 21.45,'color: #0099C6']
    ]);       

    var view = new google.visualization.DataView(data);


    var options = {
        title: "Density of Precious Metals, in g/cm^3",
        width: 600,
        height: 400,
        bar: {groupWidth: '85%'},
        legend: { position: 'none' },
    };

    var chart = new google.visualization.ColumnChart(document.getElementById('barchart_values'));
    chart.draw(view, options);
}

相同的图表,但使用谷歌“材料”条形图(不应用不同的颜色)

google.load("visualization", "1.1", {packages:["bar"]});
google.setOnLoadCallback(drawChart);
function drawChart() {

   var data = google.visualization.arrayToDataTable([
       ['Element', 'Density', { role: 'style' } ],
       ['Copper', 8.94, 'color: #FF9900'],
       ['Silver', 10.49,'color: #109618'],
       ['Gold', 19.30,'color: #3B3EAC'],
       ['Platinum', 21.45,'color: #0099C6']
  ]);   

  var view = new google.visualization.DataView(data);


  var options = {
    title: "Density of Precious Metals, in g/cm^3",
    width: 600,
    height: 400,
    bar: {groupWidth: '95%'},
    legend: { position: 'none' },
  };
    options = google.charts.Bar.convertOptions(options);
    var chart = new google.charts.Bar(document.getElementById('barchart_values'));
    chart.draw(view, options);
}

2 个答案:

答案 0 :(得分:2)

这看起来真的不可能。对于使用单独颜色的材质图表,任何地方都没有clou,如果您使用旧方法设置颜色数组,例如colors: [...],“材质图表”只采用第一种颜色并将其添加到所有条形图。我认为这根本没有在材料图表中实现(但是?)。

但是,如果你真的想要对条形图进行着色,你可以通过代码来实现:

function colorize() {
   var colors = ['#FF9900', '#109618', '#3B3EAC', '#0099C6'],
       svg = document.getElementById('barchart_values').querySelector('svg'),
       bars = svg.querySelectorAll('path');

   for (var i=0;i<bars.length;i++) {
       if (i !== selected) bars[i].setAttribute('fill', colors[i]);
   }    
}

colors[]是上面data DataTable的颜色。定位<path>是安全的,因为可视化条形的路径是<svg>内唯一存在的路径。

此功能可由就绪事件触发:

google.visualization.events.addListener(chart, 'ready', colorize);    

由于在selectonmouseover上不断重新绘制图表,因此也要将侦听器附加到这些事件:

google.visualization.events.addListener(chart, 'select', colorize);
google.visualization.events.addListener(chart, 'onmouseover', colorize);

让用户可以选择一个条形图,即不重绘选定的条形图:

function colorize() {
   var colors = ['#FF9900', '#109618', '#3B3EAC', '#0099C6'],
       selection = chart.getSelection(),
       selected = selection[0] ? selection[0].row : -1,
       svg = document.getElementById('barchart_values').querySelector('svg'),
       bars = svg.querySelectorAll('path');

   for (var i=0;i<bars.length;i++) {
       if (i !== selected) bars[i].setAttribute('fill', colors[i]);
   }    
}

您的物料图表添加了上面的代码 - &gt;的 http://jsfiddle.net/o00oayvu/

答案 1 :(得分:0)

这个可以帮助我

 var tmpColors = new Array(['orange'],['purple'],['red'],['green']);
    loop{
    .....
    .....
    options.colors = tmpColors[i];
    ....
    ....
    }