| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.adaptor = exports.tooltip = exports.meta = exports.transformOptions = void 0;
- var tslib_1 = require("tslib");
- var util_1 = require("@antv/util");
- var brush_1 = require("../../adaptor/brush");
- var common_1 = require("../../adaptor/common");
- var geometries_1 = require("../../adaptor/geometries");
- var utils_1 = require("../../utils");
- var util_2 = require("./util");
- /**
- * 散点图默认美观
- * ① data.length === 1 ② 所有数据 y 值相等 ③ 所有数据 x 值相等
- * @param params
- * @returns params
- */
- function transformOptions(options) {
- var _a = options.data, data = _a === void 0 ? [] : _a, xField = options.xField, yField = options.yField;
- if (data.length) {
- // x y 字段知否只有一个值,如果只有一个值,则进行优化
- var isOneX = true;
- var isOneY = true;
- var prev = data[0];
- var curr = void 0;
- for (var i = 1; i < data.length; i++) {
- curr = data[i];
- if (prev[xField] !== curr[xField]) {
- isOneX = false;
- }
- if (prev[yField] !== curr[yField]) {
- isOneY = false;
- }
- // 如果都不是 oneValue,那么可提前跳出循环
- if (!isOneX && !isOneY) {
- break;
- }
- prev = curr;
- }
- var keys = [];
- isOneX && keys.push(xField);
- isOneY && keys.push(yField);
- var meta_1 = (0, utils_1.pick)((0, util_2.getMeta)(options), keys);
- return (0, utils_1.deepAssign)({}, options, { meta: meta_1 });
- }
- return options;
- }
- exports.transformOptions = transformOptions;
- /**
- * 字段
- * @param params
- */
- function geometry(params) {
- var chart = params.chart, options = params.options;
- var data = options.data, type = options.type, color = options.color, shape = options.shape, pointStyle = options.pointStyle, shapeField = options.shapeField, colorField = options.colorField, xField = options.xField, yField = options.yField, sizeField = options.sizeField;
- var size = options.size;
- var tooltip = options.tooltip;
- if (sizeField) {
- if (!size) {
- size = [2, 8];
- }
- if ((0, util_1.isNumber)(size)) {
- size = [size, size];
- }
- }
- if (tooltip && !tooltip.fields) {
- tooltip = tslib_1.__assign(tslib_1.__assign({}, tooltip), { fields: [xField, yField, colorField, sizeField, shapeField] });
- }
- // 数据
- chart.data(data);
- // geometry
- (0, geometries_1.point)((0, utils_1.deepAssign)({}, params, {
- options: {
- seriesField: colorField,
- point: {
- color: color,
- shape: shape,
- size: size,
- style: pointStyle,
- },
- tooltip: tooltip,
- },
- }));
- var geometry = (0, utils_1.findGeometry)(chart, 'point');
- // 数据调整
- if (type) {
- geometry.adjust(type);
- }
- return params;
- }
- /**
- * meta 配置
- * @param params
- */
- function meta(params) {
- var _a;
- var options = params.options;
- var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;
- var newOptions = transformOptions(options);
- return (0, utils_1.flow)((0, common_1.scale)((_a = {},
- _a[xField] = xAxis,
- _a[yField] = yAxis,
- _a)))((0, utils_1.deepAssign)({}, params, { options: newOptions }));
- }
- exports.meta = meta;
- /**
- * axis 配置
- * @param params
- */
- function axis(params) {
- var chart = params.chart, options = params.options;
- var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;
- chart.axis(xField, xAxis);
- chart.axis(yField, yAxis);
- return params;
- }
- /**
- * legend 配置
- * @param params
- */
- function legend(params) {
- var chart = params.chart, options = params.options;
- var legend = options.legend, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, shapeLegend = options.shapeLegend, sizeLegend = options.sizeLegend;
- /** legend 不为 false, 则展示图例, 优先展示 color 分类图例 */
- var showLegend = legend !== false;
- if (colorField) {
- chart.legend(colorField, showLegend ? legend : false);
- }
- // 优先取 shapeLegend, 否则取 legend
- if (shapeField) {
- if (shapeLegend) {
- chart.legend(shapeField, shapeLegend);
- }
- else {
- chart.legend(shapeField, shapeLegend === false ? false : legend);
- }
- }
- if (sizeField) {
- chart.legend(sizeField, sizeLegend ? sizeLegend : false);
- }
- /** 默认不展示 shape 图例,当 shapeLegend 为 undefined 也不展示图例 */
- /** 默认没有 sizeField,则隐藏连续图例 */
- if (!showLegend && !shapeLegend && !sizeLegend) {
- chart.legend(false);
- }
- return params;
- }
- /**
- * 数据标签
- * @param params
- */
- function label(params) {
- var chart = params.chart, options = params.options;
- var label = options.label, yField = options.yField;
- var scatterGeometry = (0, utils_1.findGeometry)(chart, 'point');
- // label 为 false, 空 则不显示 label
- if (!label) {
- scatterGeometry.label(false);
- }
- else {
- var callback = label.callback, cfg = tslib_1.__rest(label, ["callback"]);
- scatterGeometry.label({
- fields: [yField],
- callback: callback,
- cfg: (0, utils_1.transformLabel)(cfg),
- });
- }
- return params;
- }
- /**
- * annotation 配置
- * - 特殊 annotation: quadrant(四象限)
- * @param params
- */
- function scatterAnnotation(params) {
- var options = params.options;
- var quadrant = options.quadrant;
- var annotationOptions = [];
- if (quadrant) {
- var _a = quadrant.xBaseline, xBaseline = _a === void 0 ? 0 : _a, _b = quadrant.yBaseline, yBaseline = _b === void 0 ? 0 : _b, labels_1 = quadrant.labels, regionStyle_1 = quadrant.regionStyle, lineStyle = quadrant.lineStyle;
- var defaultConfig_1 = (0, util_2.getQuadrantDefaultConfig)(xBaseline, yBaseline);
- // 仅支持四象限
- var quadrants = new Array(4).join(',').split(',');
- quadrants.forEach(function (_, index) {
- annotationOptions.push(tslib_1.__assign(tslib_1.__assign({ type: 'region', top: false }, defaultConfig_1.regionStyle[index].position), { style: (0, utils_1.deepAssign)({}, defaultConfig_1.regionStyle[index].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index]) }), tslib_1.__assign({ type: 'text', top: true }, (0, utils_1.deepAssign)({}, defaultConfig_1.labelStyle[index], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index])));
- });
- // 生成坐标轴
- annotationOptions.push({
- type: 'line',
- top: false,
- start: ['min', yBaseline],
- end: ['max', yBaseline],
- style: (0, utils_1.deepAssign)({}, defaultConfig_1.lineStyle, lineStyle),
- }, {
- type: 'line',
- top: false,
- start: [xBaseline, 'min'],
- end: [xBaseline, 'max'],
- style: (0, utils_1.deepAssign)({}, defaultConfig_1.lineStyle, lineStyle),
- });
- }
- return (0, utils_1.flow)((0, common_1.annotation)(annotationOptions))(params);
- }
- // 趋势线
- function regressionLine(params) {
- var options = params.options, chart = params.chart;
- var regressionLine = options.regressionLine;
- if (regressionLine) {
- var style_1 = regressionLine.style, _a = regressionLine.equationStyle, equationStyle_1 = _a === void 0 ? {} : _a, _b = regressionLine.top, top_1 = _b === void 0 ? false : _b, _c = regressionLine.showEquation, showEquation_1 = _c === void 0 ? false : _c;
- var defaultStyle_1 = {
- stroke: '#9ba29a',
- lineWidth: 2,
- opacity: 0.5,
- };
- var defaulEquationStyle_1 = {
- x: 20,
- y: 20,
- textAlign: 'left',
- textBaseline: 'middle',
- fontSize: 14,
- fillOpacity: 0.5,
- };
- chart.annotation().shape({
- top: top_1,
- render: function (container, view) {
- var group = container.addGroup({
- id: "".concat(chart.id, "-regression-line"),
- name: 'regression-line-group',
- });
- var _a = (0, util_2.getPath)({
- view: view,
- options: options,
- }), path = _a[0], equation = _a[1];
- group.addShape('path', {
- name: 'regression-line',
- attrs: tslib_1.__assign(tslib_1.__assign({ path: path }, defaultStyle_1), style_1),
- });
- if (showEquation_1) {
- group.addShape('text', {
- name: 'regression-equation',
- attrs: tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, defaulEquationStyle_1), equationStyle_1), { text: equation }),
- });
- }
- },
- });
- }
- return params;
- }
- /**
- * tooltip 配置
- * @param params
- */
- function tooltip(params) {
- var chart = params.chart, options = params.options;
- var tooltip = options.tooltip;
- if (tooltip) {
- chart.tooltip(tooltip);
- }
- else if (tooltip === false) {
- chart.tooltip(false);
- }
- return params;
- }
- exports.tooltip = tooltip;
- /**
- * 散点图适配器
- * @param chart
- * @param options
- */
- function adaptor(params) {
- // flow 的方式处理所有的配置到 G2 API
- return (0, utils_1.flow)(geometry, meta, axis, legend, tooltip, label,
- // 需要在 interaction 前面
- brush_1.brushInteraction, common_1.slider, common_1.scrollbar, common_1.interaction, scatterAnnotation, common_1.animation, common_1.theme, regressionLine)(params);
- }
- exports.adaptor = adaptor;
- //# sourceMappingURL=adaptor.js.map
|