whiskerBoxCommon.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var List = require("../../data/List");
  2. var completeDimensions = require("../../data/helper/completeDimensions");
  3. var WhiskerBoxDraw = require("../helper/WhiskerBoxDraw");
  4. var zrUtil = require("zrender/lib/core/util");
  5. var seriesModelMixin = {
  6. /**
  7. * @private
  8. * @type {string}
  9. */
  10. _baseAxisDim: null,
  11. /**
  12. * @override
  13. */
  14. getInitialData: function (option, ecModel) {
  15. // When both types of xAxis and yAxis are 'value', layout is
  16. // needed to be specified by user. Otherwise, layout can be
  17. // judged by which axis is category.
  18. var categories;
  19. var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));
  20. var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));
  21. var xAxisType = xAxisModel.get('type');
  22. var yAxisType = yAxisModel.get('type');
  23. var addOrdinal; // FIXME
  24. // 考虑时间轴
  25. if (xAxisType === 'category') {
  26. option.layout = 'horizontal';
  27. categories = xAxisModel.getCategories();
  28. addOrdinal = true;
  29. } else if (yAxisType === 'category') {
  30. option.layout = 'vertical';
  31. categories = yAxisModel.getCategories();
  32. addOrdinal = true;
  33. } else {
  34. option.layout = option.layout || 'horizontal';
  35. }
  36. var coordDims = ['x', 'y'];
  37. var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;
  38. var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];
  39. var otherAxisDim = coordDims[1 - baseAxisDimIndex];
  40. var data = option.data;
  41. addOrdinal && zrUtil.each(data, function (item, index) {
  42. if (item.value && zrUtil.isArray(item.value)) {
  43. item.value.unshift(index);
  44. } else {
  45. zrUtil.isArray(item) && item.unshift(index);
  46. }
  47. });
  48. var defaultValueDimensions = this.defaultValueDimensions;
  49. var dimensions = [{
  50. name: baseAxisDim,
  51. otherDims: {
  52. tooltip: false
  53. },
  54. dimsDef: ['base']
  55. }, {
  56. name: otherAxisDim,
  57. dimsDef: defaultValueDimensions.slice()
  58. }];
  59. dimensions = completeDimensions(dimensions, data, {
  60. encodeDef: this.get('encode'),
  61. dimsDef: this.get('dimensions'),
  62. // Consider empty data entry.
  63. dimCount: defaultValueDimensions.length + 1
  64. });
  65. var list = new List(dimensions, this);
  66. list.initData(data, categories ? categories.slice() : null);
  67. return list;
  68. },
  69. /**
  70. * If horizontal, base axis is x, otherwise y.
  71. * @override
  72. */
  73. getBaseAxis: function () {
  74. var dim = this._baseAxisDim;
  75. return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;
  76. }
  77. };
  78. var viewMixin = {
  79. init: function () {
  80. /**
  81. * Old data.
  82. * @private
  83. * @type {module:echarts/chart/helper/WhiskerBoxDraw}
  84. */
  85. var whiskerBoxDraw = this._whiskerBoxDraw = new WhiskerBoxDraw(this.getStyleUpdater());
  86. this.group.add(whiskerBoxDraw.group);
  87. },
  88. render: function (seriesModel, ecModel, api) {
  89. this._whiskerBoxDraw.updateData(seriesModel.getData());
  90. },
  91. remove: function (ecModel) {
  92. this._whiskerBoxDraw.remove();
  93. }
  94. };
  95. exports.seriesModelMixin = seriesModelMixin;
  96. exports.viewMixin = viewMixin;