| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- var _config = require("../../config");
- var __DEV__ = _config.__DEV__;
- var zrUtil = require("zrender/lib/core/util");
- var List = require("../../data/List");
- var completeDimensions = require("../../data/helper/completeDimensions");
- var _model = require("../../util/model");
- var getDataItemValue = _model.getDataItemValue;
- var converDataValue = _model.converDataValue;
- var isDataItemOption = _model.isDataItemOption;
- var CoordinateSystem = require("../../CoordinateSystem");
- function firstDataNotNull(data) {
- var i = 0;
- while (i < data.length && data[i] == null) {
- i++;
- }
- return data[i];
- }
- function ifNeedCompleteOrdinalData(data) {
- var sampleItem = firstDataNotNull(data);
- return sampleItem != null && !zrUtil.isArray(getDataItemValue(sampleItem));
- }
- /**
- * Helper function to create a list from option data
- */
- function createListFromArray(data, seriesModel, ecModel) {
- // If data is undefined
- data = data || [];
- var coordSysName = seriesModel.get('coordinateSystem');
- var creator = creators[coordSysName];
- var registeredCoordSys = CoordinateSystem.get(coordSysName);
- var completeDimOpt = {
- encodeDef: seriesModel.get('encode'),
- dimsDef: seriesModel.get('dimensions')
- }; // FIXME
- var axesInfo = creator && creator(data, seriesModel, ecModel, completeDimOpt);
- var dimensions = axesInfo && axesInfo.dimensions;
- if (!dimensions) {
- // Get dimensions from registered coordinate system
- dimensions = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y'];
- dimensions = completeDimensions(dimensions, data, completeDimOpt);
- }
- var categoryIndex = axesInfo ? axesInfo.categoryIndex : -1;
- var list = new List(dimensions, seriesModel);
- var nameList = createNameList(axesInfo, data);
- var categories = {};
- var dimValueGetter = categoryIndex >= 0 && ifNeedCompleteOrdinalData(data) ? function (itemOpt, dimName, dataIndex, dimIndex) {
- // If any dataItem is like { value: 10 }
- if (isDataItemOption(itemOpt)) {
- list.hasItemOption = true;
- } // Use dataIndex as ordinal value in categoryAxis
- return dimIndex === categoryIndex ? dataIndex : converDataValue(getDataItemValue(itemOpt), dimensions[dimIndex]);
- } : function (itemOpt, dimName, dataIndex, dimIndex) {
- var value = getDataItemValue(itemOpt);
- var val = converDataValue(value && value[dimIndex], dimensions[dimIndex]); // If any dataItem is like { value: 10 }
- if (isDataItemOption(itemOpt)) {
- list.hasItemOption = true;
- }
- var categoryAxesModels = axesInfo && axesInfo.categoryAxesModels;
- if (categoryAxesModels && categoryAxesModels[dimName]) {
- // If given value is a category string
- if (typeof val === 'string') {
- // Lazy get categories
- categories[dimName] = categories[dimName] || categoryAxesModels[dimName].getCategories();
- val = zrUtil.indexOf(categories[dimName], val);
- if (val < 0 && !isNaN(val)) {
- // In case some one write '1', '2' istead of 1, 2
- val = +val;
- }
- }
- }
- return val;
- };
- list.hasItemOption = false;
- list.initData(data, nameList, dimValueGetter);
- return list;
- }
- function isStackable(axisType) {
- return axisType !== 'category' && axisType !== 'time';
- }
- function getDimTypeByAxis(axisType) {
- return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float';
- }
- /**
- * Creaters for each coord system.
- */
- var creators = {
- cartesian2d: function (data, seriesModel, ecModel, completeDimOpt) {
- var axesModels = zrUtil.map(['xAxis', 'yAxis'], function (name) {
- return ecModel.queryComponents({
- mainType: name,
- index: seriesModel.get(name + 'Index'),
- id: seriesModel.get(name + 'Id')
- })[0];
- });
- var xAxisModel = axesModels[0];
- var yAxisModel = axesModels[1];
- var xAxisType = xAxisModel.get('type');
- var yAxisType = yAxisModel.get('type');
- var dimensions = [{
- name: 'x',
- type: getDimTypeByAxis(xAxisType),
- stackable: isStackable(xAxisType)
- }, {
- name: 'y',
- // If two category axes
- type: getDimTypeByAxis(yAxisType),
- stackable: isStackable(yAxisType)
- }];
- var isXAxisCateogry = xAxisType === 'category';
- var isYAxisCategory = yAxisType === 'category';
- dimensions = completeDimensions(dimensions, data, completeDimOpt);
- var categoryAxesModels = {};
- if (isXAxisCateogry) {
- categoryAxesModels.x = xAxisModel;
- }
- if (isYAxisCategory) {
- categoryAxesModels.y = yAxisModel;
- }
- return {
- dimensions: dimensions,
- categoryIndex: isXAxisCateogry ? 0 : isYAxisCategory ? 1 : -1,
- categoryAxesModels: categoryAxesModels
- };
- },
- singleAxis: function (data, seriesModel, ecModel, completeDimOpt) {
- var singleAxisModel = ecModel.queryComponents({
- mainType: 'singleAxis',
- index: seriesModel.get('singleAxisIndex'),
- id: seriesModel.get('singleAxisId')
- })[0];
- var singleAxisType = singleAxisModel.get('type');
- var isCategory = singleAxisType === 'category';
- var dimensions = [{
- name: 'single',
- type: getDimTypeByAxis(singleAxisType),
- stackable: isStackable(singleAxisType)
- }];
- dimensions = completeDimensions(dimensions, data, completeDimOpt);
- var categoryAxesModels = {};
- if (isCategory) {
- categoryAxesModels.single = singleAxisModel;
- }
- return {
- dimensions: dimensions,
- categoryIndex: isCategory ? 0 : -1,
- categoryAxesModels: categoryAxesModels
- };
- },
- polar: function (data, seriesModel, ecModel, completeDimOpt) {
- var polarModel = ecModel.queryComponents({
- mainType: 'polar',
- index: seriesModel.get('polarIndex'),
- id: seriesModel.get('polarId')
- })[0];
- var angleAxisModel = polarModel.findAxisModel('angleAxis');
- var radiusAxisModel = polarModel.findAxisModel('radiusAxis');
- var radiusAxisType = radiusAxisModel.get('type');
- var angleAxisType = angleAxisModel.get('type');
- var dimensions = [{
- name: 'radius',
- type: getDimTypeByAxis(radiusAxisType),
- stackable: isStackable(radiusAxisType)
- }, {
- name: 'angle',
- type: getDimTypeByAxis(angleAxisType),
- stackable: isStackable(angleAxisType)
- }];
- var isAngleAxisCateogry = angleAxisType === 'category';
- var isRadiusAxisCateogry = radiusAxisType === 'category';
- dimensions = completeDimensions(dimensions, data, completeDimOpt);
- var categoryAxesModels = {};
- if (isRadiusAxisCateogry) {
- categoryAxesModels.radius = radiusAxisModel;
- }
- if (isAngleAxisCateogry) {
- categoryAxesModels.angle = angleAxisModel;
- }
- return {
- dimensions: dimensions,
- categoryIndex: isAngleAxisCateogry ? 1 : isRadiusAxisCateogry ? 0 : -1,
- categoryAxesModels: categoryAxesModels
- };
- },
- geo: function (data, seriesModel, ecModel, completeDimOpt) {
- // TODO Region
- // 多个散点图系列在同一个地区的时候
- return {
- dimensions: completeDimensions([{
- name: 'lng'
- }, {
- name: 'lat'
- }], data, completeDimOpt)
- };
- }
- };
- function createNameList(result, data) {
- var nameList = [];
- var categoryDim = result && result.dimensions[result.categoryIndex];
- var categoryAxisModel;
- if (categoryDim) {
- categoryAxisModel = result.categoryAxesModels[categoryDim.name];
- }
- if (categoryAxisModel) {
- // FIXME Two category axis
- var categories = categoryAxisModel.getCategories();
- if (categories) {
- var dataLen = data.length; // Ordered data is given explicitly like
- // [[3, 0.2], [1, 0.3], [2, 0.15]]
- // or given scatter data,
- // pick the category
- if (zrUtil.isArray(data[0]) && data[0].length > 1) {
- nameList = [];
- for (var i = 0; i < dataLen; i++) {
- nameList[i] = categories[data[i][result.categoryIndex || 0]];
- }
- } else {
- nameList = categories.slice(0);
- }
- }
- }
- return nameList;
- }
- var _default = createListFromArray;
- module.exports = _default;
|