【问题标题】:Google charts different colors w/ single series Material bar chart谷歌图表不同颜色w/单系列材料条形图
【发布时间】:2015-06-22 19:55:22
【问题描述】:

使用 {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“材料”条形图(不应用不同的颜色)

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);
}

【问题讨论】:

标签: charts google-visualization


【解决方案1】:

这似乎是不可能的。使用单独颜色的材质图表在任何地方都没有 clou,如果您以旧方式设置颜色数组,例如 colors: [...],材质图表只需采用第一种颜色并将其添加到所有条形。我相信这根本没有在 Material Charts 中实现(还没有?)。

但如果你真的想给条形上色,你可以通过代码来实现:

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 的颜色。只针对&lt;path&gt; 是安全的,因为可视化条的路径是&lt;svg&gt; 中唯一存在的路径。

这个函数可以被ready事件触发:

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]);
   }    
}

您的 Material Chart 添加了上面的代码 -> http://jsfiddle.net/o00oayvu/

【讨论】:

  • 不错的解决方法。我想更进一步,我会将较浅版本的颜色或不透明度 (?) 应用到 select 上的未选择栏。
  • 只是在 2016 年 1 月说的材料图表仍然不支持这种类型的着色(在同一系列中)。 @davidkonrad 的技巧很棒,但有时会失败:在 FF 和 Chrome 上,如果我将鼠标悬停在其中一个条上并且我突然将鼠标拖出图表区域,默认的蓝色就会显示出来。所以我恢复到经典图表并使用“主题:'材料'”技巧。
【解决方案2】:

这个可以帮到我

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多