javascript - 显示谷歌图表树形图中的值
问题描述
我使用谷歌图表创建了一个树形图。
这是代码:
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['treemap']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Location', 'Parent', 'Market trade volume (size)', 'Market increase/decrease (color)'],
['Global', null, 0, 0],
['America', 'Global', 20, 0],
['Europe', 'Global', 30, 0],
['Asia', 'Global', 10, 0],
['Australia', 'Global', 40, 0],
['Africa', 'Global', 30, 0],
]);
tree = new
google.visualization.TreeMap(document.getElementById('chart_div'));
google.visualization.events.addListener(tree, 'select', function () {
tree.setSelection([]);
});
tree.draw(data, {
headerHeight: 15,
fontColor: 'black',
showScale: true,
maxDepth: 2
});
}
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
现在,我想在树形图上显示市场交易量(大小)的值(无需任何鼠标操作)。因为它只有一层所以可以直接显示值而无需任何计算。我在文档中搜索但找不到类似的东西。
解决方案
这里做了几个假设......
1) 您不想显示 Global 的值 --> Global(0)
2) 您不想修改数据表中的值或它的加载方式
使用对象表示法,我们可以提供值 ( v:
) 和格式化值 ( f:
)
图表将显示格式化值,但在确定树顺序时使用该值
这使我们可以在不影响关系的情况下更改显示,
以防您有超过一层的数据...
因此,aDataView
用于修改值
使用该setColumns
方法为标签提供计算列
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
var rowValue;
if (row === 0) {
rowValue = dt.getValue(row, 0); // value for global
} else {
// change display value by changing formatted value
rowValue = {
v: dt.getValue(row, 0),
f: dt.getValue(row, 0) + '(' + dt.getFormattedValue(row, 2) + ')'
};
}
return rowValue;
},
label: data.getColumnLabel(0),
type: data.getColumnType(0)
}, 1, 2, 3]);
请参阅以下工作片段...
google.charts.load('current', {
packages: ['treemap']
}).then(function () {
var data = google.visualization.arrayToDataTable([
['Location', 'Parent', 'Market trade volume (size)', 'Market increase/decrease (color)'],
['Global', null, 0, 0],
['America', 'Global', 20, 0],
['Europe', 'Global', 30, 0],
['Asia', 'Global', 10, 0],
['Australia', 'Global', 40, 0],
['Africa', 'Global', 30, 0],
]);
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
var rowValue;
if (row === 0) {
rowValue = dt.getValue(row, 0); // value for global
} else {
// change display value by changing formatted value
rowValue = {
v: dt.getValue(row, 0),
f: dt.getValue(row, 0) + '(' + dt.getFormattedValue(row, 2) + ')'
};
}
return rowValue;
},
label: data.getColumnLabel(0),
type: data.getColumnType(0)
}, 1, 2, 3]);
var tree = new google.visualization.TreeMap(document.getElementById('chart_div'));
google.visualization.events.addListener(tree, 'select', function () {
tree.setSelection([]);
});
tree.draw(view, {
headerHeight: 15,
fontColor: 'black',
showScale: true,
maxDepth: 2
});
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
推荐阅读
- ruby-on-rails - 已实施标记系统中的错误
- c# - 验证您无法控制数据或类的类的属性?
- python - 我无法将数据框保存到 .csv 文件
- swift - DispatchGroup 通知块被提前调用
- doctrine-orm - 使用苗条框架和学说查询多对多关系
- sql - SQL Server Pivot 总计?
- bash - 如何增加字符串中的最后一个数字;重击
- python - 如何将列表中的随机值分配给熊猫数据框中的列?
- visual-studio - VS SSRS 2017 自动化 DAX 没有结果,但在查询设计器中获取结果
- python - 从 philips hue 远程 API 获取令牌时出错