From f102447f03d2eb3439d54358a172a405649d425d Mon Sep 17 00:00:00 2001 From: lang Date: Thu, 10 Dec 2015 19:44:14 +0800 Subject: [PATCH] Heatmap of cartesian --- src/chart/bar/BarView.js | 14 +++-- src/chart/heatmap.js | 5 ++ src/chart/heatmap/HeatmapSeries.js | 34 ++++++++++++ src/chart/heatmap/HeatmapView.js | 81 +++++++++++++++++++++++++++ test/heatmap.html | 88 ++++++++++++++++++++++++++++++ 5 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 src/chart/heatmap.js create mode 100644 src/chart/heatmap/HeatmapSeries.js create mode 100644 src/chart/heatmap/HeatmapView.js create mode 100644 test/heatmap.html diff --git a/src/chart/bar/BarView.js b/src/chart/bar/BarView.js index 9aa302383..b5f86eafd 100644 --- a/src/chart/bar/BarView.js +++ b/src/chart/bar/BarView.js @@ -24,13 +24,13 @@ define(function (require) { var coordinateSystemType = seriesModel.get('coordinateSystem'); if (coordinateSystemType === 'cartesian2d') { - this._renderCartesian(seriesModel, ecModel, api); + this._renderOnCartesian(seriesModel, ecModel, api); } return this.group; }, - _renderCartesian: function (seriesModel, ecModel, api) { + _renderOnCartesian: function (seriesModel, ecModel, api) { var group = this.group; var data = seriesModel.getData(); var oldData = this._data; @@ -153,12 +153,12 @@ define(function (require) { var labelModel = itemModel.getModel('label.normal'); var hoverLabelModel = itemModel.getModel('label.emphasis'); - var labelText = seriesModel.getFormattedLabel(idx, 'normal') - || data.getRawValue(idx); var rectStyle = rect.style; if (labelModel.get('show')) { setLabel( - rectStyle, labelModel, color, labelText, labelPositionOutside + rectStyle, labelModel, color, + seriesModel.getFormattedLabel(idx, 'normal') || data.getRawValue(idx), + labelPositionOutside ); } else { @@ -166,7 +166,9 @@ define(function (require) { } if (hoverLabelModel.get('show')) { setLabel( - hoverStyle, hoverLabelModel, color, labelText, labelPositionOutside + hoverStyle, hoverLabelModel, color, + seriesModel.getFormattedLabel(idx, 'emphasis') || data.getRawValue(idx), + labelPositionOutside ); } else { diff --git a/src/chart/heatmap.js b/src/chart/heatmap.js new file mode 100644 index 000000000..b16b31a7e --- /dev/null +++ b/src/chart/heatmap.js @@ -0,0 +1,5 @@ +define(function (require) { + + require('./heatmap/HeatmapSeries'); + require('./heatmap/HeatmapView'); +}); \ No newline at end of file diff --git a/src/chart/heatmap/HeatmapSeries.js b/src/chart/heatmap/HeatmapSeries.js new file mode 100644 index 000000000..07235f732 --- /dev/null +++ b/src/chart/heatmap/HeatmapSeries.js @@ -0,0 +1,34 @@ +define(function (require) { + + var SeriesModel = require('../../model/Series'); + var createListFromArray = require('../helper/createListFromArray'); + + return SeriesModel.extend({ + type: 'series.heatmap', + + getInitialData: function (option, ecModel) { + return createListFromArray(option.data, this, ecModel); + }, + + defaultOption: { + + // Cartesian2D or geo + coordinateSystem: 'cartesian2d', + + zlevel: 0, + + z: 2, + + // Cartesian coordinate system + xAxisIndex: 0, + yAxisIndex: 0, + + // Geo coordinate system + geoIndex: 0, + + // No blur + // Available when heatmap is on geo + blurSize: 0 + } + }); +}); \ No newline at end of file diff --git a/src/chart/heatmap/HeatmapView.js b/src/chart/heatmap/HeatmapView.js new file mode 100644 index 000000000..15bb7ea11 --- /dev/null +++ b/src/chart/heatmap/HeatmapView.js @@ -0,0 +1,81 @@ +define(function (require) { + + var graphic = require('../../util/graphic'); + + return require('../../echarts').extendChartView({ + + type: 'heatmap', + + render: function (seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type === 'cartesian2d') { + this._renderOnCartesian(coordSys, seriesModel, ecModel, api); + } + else if (coordSys.type === 'geo') { + this._renderOnGeo(coordSys, seriesModel, ecModel, api); + } + }, + + _renderOnCartesian: function (cartesian, seriesModel, ecModel, api) { + var xAxis = cartesian.getAxis('x'); + var yAxis = cartesian.getAxis('y'); + var group = this.group; + group.removeAll(); + + if (!(xAxis.type === 'category' && yAxis.type === 'category')) { + throw new Error('Heatmap on cartesian must have two category axes'); + } + if (!(xAxis.onBand && yAxis.onBand)) { + throw new Error('Heatmap on cartesian must have two axes with boundaryGap true'); + } + var width = xAxis.getBandWidth(); + var height = yAxis.getBandWidth(); + + var data = seriesModel.getData(); + data.each(['x', 'y', 'z'], function (x, y, z, idx) { + var itemModel = data.getItemModel(idx); + var point = cartesian.dataToPoint([x, y]); + var rect = new graphic.Rect({ + shape: { + x: point[0] - width / 2, + y: point[1] - height / 2, + width: width, + height: height + }, + style: { + fill: data.getItemVisual(idx, 'color') + } + }); + var style = itemModel.getModel('itemStyle.normal').getItemStyle(['color']); + var hoverStl = itemModel.getModel('itemStyle.emphasis').getItemStyle(); + var labelModel = itemModel.getModel('label.normal'); + var hoverLabelModel = itemModel.getModel('label.emphasis'); + + var rawValue = data.getRawValue(idx); + var defaultText = '-'; + if (rawValue && rawValue[2] != null) { + defaultText = rawValue[2]; + } + if (labelModel.get('show')) { + graphic.setText(style, labelModel); + style.text = seriesModel.getFormattedLabel(idx, 'normal') || defaultText; + } + if (hoverLabelModel.get('show')) { + graphic.setText(hoverStl, hoverLabelModel); + hoverStl.text = seriesModel.getFormattedLabel(idx, 'emphasis') || defaultText; + } + + rect.setStyle(style); + + graphic.setHoverStyle(rect, hoverStl); + + group.add(rect); + data.setItemGraphicEl(idx, rect); + }); + }, + + _renderOnGeo: function (geo, seriesModel, ecModel, api) { + + } + }); +}); \ No newline at end of file diff --git a/test/heatmap.html b/test/heatmap.html new file mode 100644 index 000000000..09c483a2c --- /dev/null +++ b/test/heatmap.html @@ -0,0 +1,88 @@ + + + + + + + + + +
+ + + \ No newline at end of file -- GitLab