教程
本教程主要介绍下几个常用的 label 标注需求。
格式化文本
如果默认提供的 label 显示形式不满足需求时,可以在 label 中设置 renderer 属性,为其定义回调函数即可。
chart.interval().position('x*y').label('x', {
renderer: function(text, item, index) {
// text 为每条记录 x 属性的值
// item 为映射后的每条数据记录,是一个对象,可以从里面获取你想要的数据信息
// index 为每条记录的索引
}
});
完整代码如下:
var data = [
{name: 'Microsoft Internet Explorer', value: 56.33 },
{name: 'Chrome', value: 24.03},
{name: 'Firefox', value: 10.38},
{name: 'Safari', value: 4.77},
{name: 'Opera', value: 0.91},
{name: 'Proprietary or Undetectable', value: 0.2}
];
var Stat = G2.Stat;
var chart = new G2.Chart({
id: 'c1',
width: 800,
height: 400
});
chart.source(data);
// 重要:绘制饼图时,必须声明 theta 坐标系
chart.coord('theta', {
radius: 0.8 // 设置饼图的大小
});
chart.legend('name', {
position: 'bottom'
});
chart.intervalStack()
.position(Stat.summary.percent('value'))
.color('name')
.label('name', {
renderer: function(text, item, index) {
var point = item.point; // 每个弧度对应的点
var percent = point['..percent']; // ..percent 字段由 Stat.summary.percent 统计函数生成
percent = (percent * 100).toFixed(2) + '%';
return text + ' ' + percent;
}
});
chart.render();
自定义 html 文本
chart.interval().position('x*y').label('x', {
custom: true,
renderer: function(text, item, index) {
// text 为每条记录 x 属性的值
// item 为映射后的每条数据记录,是一个对象,可以从里面获取你想要的数据信息
// index 为每条记录的索引
}
});
label 除了可以格式化文本的显示,也支持使用 html 自定义显示的样式。只需要将 custom
属性设置为 true
, 并定义 renderer 格式化文本的回调函数即可,如下例所示:
完整代码:
// 格式化饼图文本
function formatter(text, item) {
var point = item.point; // 每个弧度对应的点
var proportion = point['..proportion']; // ..proportion 字段由Stat.summary.proportion统计函数生成
proportion = (proportion * 100).toFixed(2) + '%';
return '<span class="title">' + text + '</span><br><span style="color:' + point.color + '">' + proportion + '</span>'; // 自定义 html 模板
}
$.getJSON('../static/data/diamond.json',function (data) {
var Stat = G2.Stat;
var chart = new G2.Chart({
id: 'c2',
width: 800,
height: 400,
plotCfg: {
margin: [20, 90, 60, 80]
}
});
chart.source(data);
chart.coord('theta',{radius: 0.6});
// 不同cut(切割工艺)所占的比例
chart.intervalStack()
.position(Stat.summary.proportion())
.color('cut')
.label('cut', {
custom: true, // 使用自定义文本
renderer: formatter, // 格式化文本的函数
labelLine: false, // 不显示文本的连接线
offset: 50 // 文本距离图形的距离
});
chart.render();
});
使用统计函数
label 方法也是只统计函数嵌套的,比如下图,Y 轴映射的是每个分类的总数,但是你又想标注每个分类的数据占总数据的比例,这个时候就可以直接在 label 中嵌套统计函数。
chart.interval().position('x*y').label(Stat.summary.percent('y')).color('x');
完整代码:
$.getJSON('../static/data/diamond.json',function (data) {
var Stat = G2.Stat;
var chart = new G2.Chart({
id: 'c3',
width: 800,
height: 400,
plotCfg: {
margin: [40, 80, 80, 80]
}
});
chart.source(data);
chart.interval().position(Stat.summary.sum('cut*price')).color('cut')
.label(Stat.summary.percent('price'));
chart.render();
});