使用{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);
}
答案 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);
由于在select
和onmouseover
上不断重新绘制图表,因此也要将侦听器附加到这些事件:
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];
....
....
}