提交 c73ff8cc 编写于 作者: P pah100

make markLine support candlestick and boxplot

上级 c396ada0
......@@ -13,22 +13,21 @@ define(function (require) {
var LineDraw = require('../../chart/helper/LineDraw');
var markLineTransform = function (seriesModel, coordSys, baseAxis, valueAxis, precision, item) {
var markLineTransform = function (seriesModel, coordSys, mlModel, item) {
var data = seriesModel.getData();
// Special type markLine like 'min', 'max', 'average'
var mlType = item.type;
if (!zrUtil.isArray(item)
&& mlType === 'min' || mlType === 'max' || mlType === 'average'
&& (mlType === 'min' || mlType === 'max' || mlType === 'average')
) {
if (item.valueIndex != null) {
baseAxis = coordSys.getAxis(coordSys.dimensions[1 - item.valueIndex]);
valueAxis = coordSys.getAxis(coordSys.dimensions[item.valueIndex]);
}
var baseAxisKey = baseAxis.dim + 'Axis';
var valueAxisKey = valueAxis.dim + 'Axis';
var baseScaleExtent = baseAxis.scale.getExtent();
var axisInfo = markerHelper.getAxisInfo(item, data, coordSys, seriesModel);
var baseAxisKey = axisInfo.baseAxis.dim + 'Axis';
var valueAxisKey = axisInfo.valueAxis.dim + 'Axis';
var baseScaleExtent = axisInfo.baseAxis.scale.getExtent();
var mlFrom = zrUtil.extend({}, item);
var mlFrom = zrUtil.clone(item);
var mlTo = {};
mlFrom.type = null;
......@@ -37,21 +36,25 @@ define(function (require) {
mlFrom[baseAxisKey] = baseScaleExtent[0];
mlTo[baseAxisKey] = baseScaleExtent[1];
var value = mlType === 'average'
? data.getSum(valueAxis.dim, true) / data.count()
: data.getDataExtent(valueAxis.dim)[mlType === 'max' ? 1 : 0];
var value = markerHelper.numCalculate(data, axisInfo.valueDataDim, mlType);
// Round if axis is cateogry
value = valueAxis.coordToData(valueAxis.dataToCoord(value));
value = axisInfo.valueAxis.coordToData(axisInfo.valueAxis.dataToCoord(value));
var precision = mlModel.get('precision');
if (precision >= 0) {
value = +value.toFixed(precision);
}
mlFrom[valueAxisKey] = mlTo[valueAxisKey] = value;
item = [mlFrom, mlTo, { // Extra option for tooltip and label
type: mlType,
// Force to use the value of calculated value.
value: +value.toFixed(precision)
value: value
}];
}
item = [
markerHelper.dataTransform(seriesModel, item[0]),
markerHelper.dataTransform(seriesModel, item[1]),
......@@ -228,27 +231,15 @@ define(function (require) {
* @param {module:echarts/model/Model} mpModel
*/
function createList(coordSys, seriesModel, mlModel) {
// var dataDimensions = seriesData.dimensions;
// var dimensionInfosMap = zrUtil.map(
// dataDimensions, seriesData.getDimensionInfo, seriesData
// );
// Mark line get the dimensions from coordinate system
// Because user specify the data by xAxis, yAxis
var dimensions = coordSys.dimensions;
var fromData = new List(dimensions, mlModel);
var toData = new List(dimensions, mlModel);
var fromData = new List(seriesModel.getCoordDimensionInfo(), mlModel);
var toData = new List(seriesModel.getCoordDimensionInfo(), mlModel);
// No dimensions
var lineData = new List([], mlModel);
if (coordSys) {
var baseAxis = coordSys.getBaseAxis();
var valueAxis = coordSys.getOtherAxis(baseAxis);
var precision = mlModel.get('precision');
var optData = zrUtil.filter(
zrUtil.map(mlModel.get('data'), zrUtil.curry(
markLineTransform, seriesModel, coordSys, baseAxis, valueAxis, precision
markLineTransform, seriesModel, coordSys, mlModel
)),
zrUtil.curry(markLineFilter, coordSys)
);
......
......@@ -23,9 +23,7 @@ define(function (require) {
mlType, data, baseDataDim, valueDataDim, baseCoordIndex, valueCoordIndex
) {
var coordArr = [];
var value = mlType === 'average'
? data.getSum(valueDataDim, true) / data.count()
: data.getDataExtent(valueDataDim, true)[mlType === 'max' ? 1 : 0];
var value = numCalculate(data, valueDataDim, mlType);
var dataIndex = data.indexOfNearest(valueDataDim, value, true);
coordArr[baseCoordIndex] = data.get(baseDataDim, dataIndex, true);
......@@ -85,36 +83,23 @@ define(function (require) {
&& !zrUtil.isArray(item.coord)
&& coordSys
) {
var baseAxis;
var baseDataDim;
var valueDataDim;
var valueAxis;
if (item.valueIndex != null || item.valueDim != null) {
valueDataDim = item.valueIndex != null
? data.getDimension(item.valueIndex) : item.valueDim;
valueAxis = coordSys.getAxis(seriesModel.getCoordDimensionInfo(valueDataDim).name);
baseAxis = coordSys.getOtherAxis(valueAxis);
baseDataDim = seriesModel.getDimensionsOnAxis(baseAxis.dim)[0];
}
else {
baseAxis = seriesModel.getBaseAxis();
valueAxis = coordSys.getOtherAxis(baseAxis);
baseDataDim = seriesModel.getDimensionsOnAxis(baseAxis.dim)[0];
valueDataDim = seriesModel.getDimensionsOnAxis(valueAxis.dim)[0];
}
var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);
// Clone the option
// Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value
item = zrUtil.clone(item);
if (item.type && markerTypeCalculator[item.type] && baseAxis && valueAxis) {
if (item.type
&& markerTypeCalculator[item.type]
&& axisInfo.baseAxis && axisInfo.valueAxis
) {
var dims = coordSys.dimensions;
var baseCoordIndex = indexOf(dims, baseAxis.dim);
var valueCoordIndex = indexOf(dims, valueAxis.dim);
var baseCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);
var valueCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);
item.coord = markerTypeCalculator[item.type](
data, baseDataDim, valueDataDim, baseCoordIndex, valueCoordIndex
data, axisInfo.baseDataDim, axisInfo.valueDataDim,
baseCoordIndex, valueCoordIndex
);
// Force to use the value of calculated value.
item.value = item.coord[valueCoordIndex];
......@@ -130,6 +115,25 @@ define(function (require) {
return item;
};
var getAxisInfo = function (item, data, coordSys, seriesModel) {
var ret = {};
if (item.valueIndex != null || item.valueDim != null) {
ret.valueDataDim = item.valueIndex != null
? data.getDimension(item.valueIndex) : item.valueDim;
ret.valueAxis = coordSys.getAxis(seriesModel.getCoordDimensionInfo(ret.valueDataDim).name);
ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);
ret.baseDataDim = seriesModel.getDimensionsOnAxis(ret.baseAxis.dim)[0];
}
else {
ret.baseAxis = seriesModel.getBaseAxis();
ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);
ret.baseDataDim = seriesModel.getDimensionsOnAxis(ret.baseAxis.dim)[0];
ret.valueDataDim = seriesModel.getDimensionsOnAxis(ret.valueAxis.dim)[0];
}
return ret;
};
/**
* Filter data which is out of coordinateSystem range
......@@ -154,9 +158,17 @@ define(function (require) {
}
};
var numCalculate = function (data, valueDataDim, mlType) {
return mlType === 'average'
? data.getSum(valueDataDim, true) / data.count()
: data.getDataExtent(valueDataDim, true)[mlType === 'max' ? 1 : 0];
};
return {
dataTransform: dataTransform,
dataFilter: dataFilter,
dimValueGetter: dimValueGetter
dimValueGetter: dimValueGetter,
getAxisInfo: getAxisInfo,
numCalculate: numCalculate
};
});
\ No newline at end of file
......@@ -128,6 +128,7 @@
].join('<br/>')
}
},
markPoint: {
data: [
{
......@@ -169,7 +170,34 @@
valueDim: 'Q1'
}
]
},
markLine: {
data: [
[
{name: '两个坐标之间的标线', coord: [1, 240]},
{coord: [2, 260]}
],
[
{name: '两个屏幕坐标之间的标线', x: 50, y: 60},
{x: 70, y: 90}
],
[
{name: 'max - min', type: 'max'},
{type: 'min'}
],
{
name: 'min line',
type: 'min'
},
{
name: 'max line on dim:Q3',
type: 'max',
valueDim: 'Q3'
}
]
}
},
{
name: 'outlier',
......
......@@ -34,7 +34,8 @@
'echarts/component/grid',
'echarts/component/tooltip',
'echarts/component/dataZoom',
'echarts/component/markPoint'
'echarts/component/markPoint',
'echarts/component/markLine'
], function (echarts, rawData) {
chart = echarts.init(document.getElementById('main'), null, {
......@@ -174,6 +175,31 @@
return param.name + '<br>' + (param.data.coord || '');
}
}
},
markLine: {
data: [
[
{name: '两个坐标之间的标线', coord: ['2013/4/25', 2130]},
{coord: ['2013/5/27', 2220]}
],
[
{name: '两个屏幕坐标之间的标线', x: 100, y: 100},
{x: 250, y: 130}
],
[
{name: 'max - min', type: 'max'},
{type: 'min'}
],
{
name: 'min line',
type: 'min'
},
{
name: 'max line on dim:open',
type: 'max',
valueDim: 'open'
}
]
}
}
]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册