/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import createSeriesData from '../helper/createSeriesData'; import SeriesModel from '../../model/Series'; import { SeriesOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, OptionDataValue, ItemStyleOption, SeriesLabelOption, SeriesLargeOptionMixin, SeriesStackOptionMixin, SymbolOptionMixin, StatesOptionMixin, OptionDataItemObject, SeriesEncodeOptionMixin, CallbackDataParams, DefaultEmphasisFocus } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; interface ScatterStateOption { itemStyle?: ItemStyleOption label?: SeriesLabelOption } interface ScatterStatesOptionMixin { emphasis?: { focus?: DefaultEmphasisFocus scale?: boolean | number } } export interface ScatterDataItemOption extends SymbolOptionMixin, ScatterStateOption, StatesOptionMixin, OptionDataItemObject { } export interface ScatterSeriesOption extends SeriesOption, ScatterStatesOptionMixin>, ScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SeriesLargeOptionMixin, SeriesStackOptionMixin, SymbolOptionMixin, SeriesEncodeOptionMixin { type?: 'scatter' coordinateSystem?: string cursor?: string clip?: boolean data?: (ScatterDataItemOption | OptionDataValue | OptionDataValue[])[] | ArrayLike // Can be a flattern array } class ScatterSeriesModel extends SeriesModel { static readonly type = 'series.scatter'; type = ScatterSeriesModel.type; static readonly dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar']; hasSymbolVisual = true; getInitialData(option: ScatterSeriesOption, ecModel: GlobalModel): SeriesData { return createSeriesData(null, this, { useEncodeDefaulter: true }); } getProgressive() { const progressive = this.option.progressive; if (progressive == null) { // PENDING return this.option.large ? 5e3 : this.get('progressive'); } return progressive; } getProgressiveThreshold() { const progressiveThreshold = this.option.progressiveThreshold; if (progressiveThreshold == null) { // PENDING return this.option.large ? 1e4 : this.get('progressiveThreshold'); } return progressiveThreshold; } brushSelector(dataIndex: number, data: SeriesData, selectors: BrushCommonSelectorsForSeries): boolean { return selectors.point(data.getItemLayout(dataIndex)); } getZLevelKey() { // Each progressive series has individual key. return this.getData().count() > this.getProgressiveThreshold() ? this.id : ''; } static defaultOption: ScatterSeriesOption = { coordinateSystem: 'cartesian2d', // zlevel: 0, z: 2, legendHoverLink: true, symbolSize: 10, // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 // symbolRotate: null, // 图形旋转控制 large: false, // Available when large is true largeThreshold: 2000, // cursor: null, itemStyle: { opacity: 0.8 // color: 各异 }, emphasis: { scale: true }, // If clip the overflow graphics // Works on cartesian / polar series clip: true, select: { itemStyle: { borderColor: '#212121' } }, universalTransition: { divideShape: 'clone' } // progressive: null }; } export default ScatterSeriesModel;