Google 图表不同颜色 w/ 单一系列 Material 条形图
Google charts different colors w/ single series Material bar chart
使用 {role: 'style'} 我可以将不同的颜色应用于单个系列条形图。但是如果我使用新的 Google "Material" 条形图,我不能。
"regular" 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 "Material" 条形图(未应用不同的颜色)
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);
}
好像真的不可能。 Material 使用单独颜色的图表在任何地方都没有任何问题,如果您以旧方式设置颜色数组,例如 colors: [...]
,Material 图表只需采用第一种颜色并将其添加到所有颜色酒吧。我相信这根本没有在 Material 图表中实现(还没有?)。
但是如果你真的想要给条形图着色,你可以通过代码来完成:
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);
并让用户能够 select 条形图,即不要重新绘制 selected 条形图 :
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 图表添加了上面的代码 -> http://jsfiddle.net/o00oayvu/
这个帮助我
var tmpColors = new Array(['orange'],['purple'],['red'],['green']);
loop{
.....
.....
options.colors = tmpColors[i];
....
....
}
使用 {role: 'style'} 我可以将不同的颜色应用于单个系列条形图。但是如果我使用新的 Google "Material" 条形图,我不能。
"regular" 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 "Material" 条形图(未应用不同的颜色)
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);
}
好像真的不可能。 Material 使用单独颜色的图表在任何地方都没有任何问题,如果您以旧方式设置颜色数组,例如 colors: [...]
,Material 图表只需采用第一种颜色并将其添加到所有颜色酒吧。我相信这根本没有在 Material 图表中实现(还没有?)。
但是如果你真的想要给条形图着色,你可以通过代码来完成:
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);
并让用户能够 select 条形图,即不要重新绘制 selected 条形图 :
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 图表添加了上面的代码 -> http://jsfiddle.net/o00oayvu/
这个帮助我
var tmpColors = new Array(['orange'],['purple'],['red'],['green']);
loop{
.....
.....
options.colors = tmpColors[i];
....
....
}