UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

99 lines (98 loc) 2.97 kB
import { map } from "../../../../zrender/lib/core/util.mjs"; import { parsePercent } from "../../util/number.mjs"; function themeRiverLayout(ecModel, api) { ecModel.eachSeriesByType("themeRiver", function(seriesModel) { var data = seriesModel.getData(); var single = seriesModel.coordinateSystem; var layoutInfo = {}; var rect = single.getRect(); layoutInfo.rect = rect; var boundaryGap = seriesModel.get("boundaryGap"); var axis = single.getAxis(); layoutInfo.boundaryGap = boundaryGap; if (axis.orient === "horizontal") { boundaryGap[0] = parsePercent(boundaryGap[0], rect.height); boundaryGap[1] = parsePercent(boundaryGap[1], rect.height); var height = rect.height - boundaryGap[0] - boundaryGap[1]; doThemeRiverLayout(data, seriesModel, height); } else { boundaryGap[0] = parsePercent(boundaryGap[0], rect.width); boundaryGap[1] = parsePercent(boundaryGap[1], rect.width); var width = rect.width - boundaryGap[0] - boundaryGap[1]; doThemeRiverLayout(data, seriesModel, width); } data.setLayout("layoutInfo", layoutInfo); }); } function doThemeRiverLayout(data, seriesModel, height) { if (!data.count()) { return; } var coordSys = seriesModel.coordinateSystem; var layerSeries = seriesModel.getLayerSeries(); var timeDim = data.mapDimension("single"); var valueDim = data.mapDimension("value"); var layerPoints = map(layerSeries, function(singleLayer) { return map(singleLayer.indices, function(idx) { var pt = coordSys.dataToPoint(data.get(timeDim, idx)); pt[1] = data.get(valueDim, idx); return pt; }); }); var base = computeBaseline(layerPoints); var baseLine = base.y0; var ky = height / base.max; var n = layerSeries.length; var m = layerSeries[0].indices.length; var baseY0; for (var j = 0; j < m; ++j) { baseY0 = baseLine[j] * ky; data.setItemLayout(layerSeries[0].indices[j], { layerIndex: 0, x: layerPoints[0][j][0], y0: baseY0, y: layerPoints[0][j][1] * ky }); for (var i = 1; i < n; ++i) { baseY0 += layerPoints[i - 1][j][1] * ky; data.setItemLayout(layerSeries[i].indices[j], { layerIndex: i, x: layerPoints[i][j][0], y0: baseY0, y: layerPoints[i][j][1] * ky }); } } } function computeBaseline(data) { var layerNum = data.length; var pointNum = data[0].length; var sums = []; var y0 = []; var max = 0; for (var i = 0; i < pointNum; ++i) { var temp = 0; for (var j = 0; j < layerNum; ++j) { temp += data[j][i][1]; } if (temp > max) { max = temp; } sums.push(temp); } for (var k = 0; k < pointNum; ++k) { y0[k] = (max - sums[k]) / 2; } max = 0; for (var l = 0; l < pointNum; ++l) { var sum = sums[l] + y0[l]; if (sum > max) { max = sum; } } return { y0, max }; } export { themeRiverLayout as default };