Skip to content

Commit

Permalink
markPoint markLine [scatter] 特殊值开箱即用
Browse files Browse the repository at this point in the history
support #249
  • Loading branch information
kener committed Mar 19, 2014
1 parent a92654a commit 43551c7
Show file tree
Hide file tree
Showing 4 changed files with 209 additions and 21 deletions.
16 changes: 15 additions & 1 deletion doc/example/scatter.html
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,21 @@
]);
}
return d;
})()
})(),
markPoint : {
data : [
{type : 'max', name: 'y最大值'},
{type : 'min', name: 'y最小值'},
{type : 'max', name: 'x最大值', valueIndex : 0, symbol:'arrow',itemStyle:{normal:{borderColor:'red'}}},
{type : 'min', name: 'x最小值', valueIndex : 0, symbol:'arrow',itemStyle:{normal:{borderColor:'red'}}}
]
},
markLine : {
data : [
{type : 'average', name: 'y平均值'},
{type : 'average', name: 'x平均值', valueIndex : 0, itemStyle:{normal:{borderColor:'red'}}}
]
}
},
{
name:'scatter2',
Expand Down
35 changes: 32 additions & 3 deletions doc/example/scatter1.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,16 @@
tooltip : {
trigger: 'item',
formatter : function(value) {
return value[0] + ' :<br/>'
if (value[2].length > 1) {
return value[0] + ' :<br/>'
+ value[2][0] + 'cm '
+ value[2][1] + 'kg ';
}
else {
return value[0] + ' :<br/>'
+ value[1] + ' : '
+ value[2] + 'kg ';
}
}
},
legend: {
Expand Down Expand Up @@ -172,7 +179,18 @@
[156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6],
[169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8],
[176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]
]
],
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
}
},
{
name:'男性',
Expand Down Expand Up @@ -227,7 +245,18 @@
[180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1],
[170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1],
[180.3, 83.2], [180.3, 83.2]
]
],
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
}
}
]
};
Expand Down
172 changes: 158 additions & 14 deletions src/chart/scatter.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,17 +150,142 @@ define(function(require) {
i, // 数据index
data.name || '' // 名称
]);

}
_markMap(xAxis, yAxis, serie.data, pointList[seriesIndex])
self.buildMark(
serie,
seriesIndex,
component
component,
{
xMarkMap : _needMarkMap(seriesIndex)
? _markMap(xAxis, yAxis, serie.data, pointList[seriesIndex])
: {}
}
);
}

// console.log(pointList)
_buildPointList(pointList);
}


function _needMarkMap(seriesIndex) {
var serie = series[seriesIndex];
var mark = [];
if (serie.markPoint && serie.markPoint.data) {
mark.push(serie.markPoint.data);
}
if (serie.markLine && serie.markLine.data) {
mark.push(serie.markLine.data);
}

var data;
var len = mark.length;
while (len--) {
data = mark[len];
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].type == 'max'
|| data[i].type == 'min'
|| data[i].type == 'average'
) {
return true;
}
}
}
return false;
}

function _markMap(xAxis, yAxis, data, pointList) {
var xMarkMap = {
min0 : Number.POSITIVE_INFINITY,
max0 : Number.NEGATIVE_INFINITY,
sum0 : 0,
counter0 : 0,
average0 : 0,
min1 : Number.POSITIVE_INFINITY,
max1 : Number.NEGATIVE_INFINITY,
sum1 : 0,
counter1 : 0,
average1 : 0
};
var value;
for (var i = 0, l = pointList.length; i < l; i++) {
/**
x, // 横坐标
y, // 纵坐标
i, // 数据index
data.name || '' // 名称
*/
value = data[pointList[i][2]].value || data[pointList[i][2]];
// 横轴
if (xMarkMap.min0 > value[0]) {
xMarkMap.min0 = value[0];
xMarkMap.minY0 = pointList[i][1];
xMarkMap.minX0 = pointList[i][0];
}
if (xMarkMap.max0 < value[0]) {
xMarkMap.max0 = value[0];
xMarkMap.maxY0 = pointList[i][1];
xMarkMap.maxX0 = pointList[i][0];
}
xMarkMap.sum0 += value[0];
xMarkMap.counter0++;

// 纵轴
if (xMarkMap.min1 > value[1]) {
xMarkMap.min1 = value[1];
xMarkMap.minY1 = pointList[i][1];
xMarkMap.minX1 = pointList[i][0];
}
if (xMarkMap.max1 < value[1]) {
xMarkMap.max1 = value[1];
xMarkMap.maxY1 = pointList[i][1];
xMarkMap.maxX1 = pointList[i][0];
}
xMarkMap.sum1 += value[1];
xMarkMap.counter1++;
}

var gridX = component.grid.getX();
var gridXend = component.grid.getXend();
var gridY = component.grid.getY();
var gridYend = component.grid.getYend();

xMarkMap.average0 = (xMarkMap.sum0 / xMarkMap.counter0).toFixed(2) - 0;
var x = xAxis.getCoord(xMarkMap.average0);
// 横轴平均纵向
xMarkMap.averageLine0 = [
[x, gridYend],
[x, gridY]
];
xMarkMap.minLine0 = [
[xMarkMap.minX0, gridYend],
[xMarkMap.minX0, gridY]
];
xMarkMap.maxLine0 = [
[xMarkMap.maxX0, gridYend],
[xMarkMap.maxX0, gridY]
];

xMarkMap.average1 = (xMarkMap.sum1 / xMarkMap.counter1).toFixed(2) - 0;
var y = yAxis.getCoord(xMarkMap.average1);
// 纵轴平均横向
xMarkMap.averageLine1 = [
[gridX, y],
[gridXend, y]
];
xMarkMap.minLine1 = [
[gridX, xMarkMap.minY1],
[gridXend, xMarkMap.minY1]
];
xMarkMap.maxLine1 = [
[gridX, xMarkMap.maxY1],
[gridXend, xMarkMap.maxY1]
];

return xMarkMap;
}

/**
* 生成折线和折线上的拐点
*/
Expand Down Expand Up @@ -260,21 +385,40 @@ define(function(require) {
}

// 位置转换
function getMarkCoord(serie, seriesIndex, mpData) {
function getMarkCoord(serie, seriesIndex, mpData, markCoordParams) {
var xAxis = component.xAxis.getAxis(serie.xAxisIndex);
var yAxis = component.yAxis.getAxis(serie.yAxisIndex);
var pos;

return [
typeof mpData.xAxis != 'string'
&& xAxis.getCoordByIndex
? xAxis.getCoordByIndex(mpData.xAxis || 0)
: xAxis.getCoord(mpData.xAxis || 0),

typeof mpData.yAxis != 'string'
&& yAxis.getCoordByIndex
? yAxis.getCoordByIndex(mpData.yAxis || 0)
: yAxis.getCoord(mpData.yAxis || 0)
];
if (mpData.type
&& (mpData.type == 'max' || mpData.type == 'min' || mpData.type == 'average')
) {
// 特殊值内置支持
// 默认取纵值
var valueIndex = typeof mpData.valueIndex != 'undefined'
? mpData.valueIndex : 1;
pos = [
markCoordParams.xMarkMap[mpData.type + 'X' + valueIndex],
markCoordParams.xMarkMap[mpData.type + 'Y' + valueIndex],
markCoordParams.xMarkMap[mpData.type + 'Line' + valueIndex],
markCoordParams.xMarkMap[mpData.type + valueIndex]
];
}
else {
pos = [
typeof mpData.xAxis != 'string'
&& xAxis.getCoordByIndex
? xAxis.getCoordByIndex(mpData.xAxis || 0)
: xAxis.getCoord(mpData.xAxis || 0),

typeof mpData.yAxis != 'string'
&& yAxis.getCoordByIndex
? yAxis.getCoordByIndex(mpData.yAxis || 0)
: yAxis.getCoord(mpData.yAxis || 0)
];
}

return pos;
}

/**
Expand Down
7 changes: 4 additions & 3 deletions src/component/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ define(function(require) {
markPoint.data[i].y = typeof mpData.y != 'undefined'
? mpData.y : pos[1];
if (mpData.type
&& (mpData.type === 'max' || mpData.type === 'min')
&& (mpData.type == 'max' || mpData.type == 'min')
) {
// 特殊值内置支持
markPoint.data[i].value = pos[3];
Expand Down Expand Up @@ -297,7 +297,7 @@ define(function(require) {
for (var i = 0, l = markLine.data.length; i < l; i++) {
mlData = markLine.data[i];
if (mlData.type
&& (mlData.type === 'max' || mlData.type === 'min' || mlData.type === 'average')
&& (mlData.type == 'max' || mlData.type == 'min' || mlData.type == 'average')
) {
// 特殊值内置支持
pos = self.getMarkCoord(serie, seriesIndex, mlData, markCoordParams);
Expand Down Expand Up @@ -547,7 +547,8 @@ define(function(require) {
itemShape,
serie, seriesIndex,
data[i][0], 0,
data[i][0].name + ' : ' + data[i][1].name
data[i][0].name + (data[i][1].name != ''
? (' > ' + data[i][1].name) : '')
);
pList.push(itemShape);
}
Expand Down

0 comments on commit 43551c7

Please sign in to comment.