public calculateAxesProperties()

in src/EnhancedScatterChart.ts [2895:2974]


    public calculateAxesProperties(options: CalculateScaleAndDomainOptions): IAxisProperties[] {
        const data: EnhancedScatterChartData = this.data,
            dataPoints: EnhancedScatterChartDataPoint[] = data.dataPoints;

        this.margin = options.margin;
        this.viewport = options.viewport;

        let minY: number = EnhancedScatterChart.MinAxisValue,
            maxY: number = EnhancedScatterChart.MaxAxisValue,
            minX: number = EnhancedScatterChart.MinAxisValue,
            maxX: number = EnhancedScatterChart.MaxAxisValue;

        if (dataPoints.length > 0) {
            minY = d3.min<EnhancedScatterChartDataPoint, number>(dataPoints, dataPoint => dataPoint.y);
            maxY = d3.max<EnhancedScatterChartDataPoint, number>(dataPoints, dataPoint => dataPoint.y);
            minX = d3.min<EnhancedScatterChartDataPoint, number>(dataPoints, dataPoint => dataPoint.x);
            maxX = d3.max<EnhancedScatterChartDataPoint, number>(dataPoints, dataPoint => dataPoint.x);
        }

        const xDomain: number[] = [minX, maxX];

        const combinedXDomain: number[] = axis.combineDomain(
            this.optimizeTranslateValues(options.forcedXDomain),
            xDomain
        );

        const xAxisFormatString: string = valueFormatter.getFormatStringByColumn(data.xCol);

        this.xAxisProperties = axis.createAxis({
            pixelSpan: this.viewportIn.width,
            dataDomain: combinedXDomain,
            metaDataColumn: data.xCol,
            formatString: xAxisFormatString,
            outerPadding: EnhancedScatterChart.OuterPadding,
            isScalar: true,
            isVertical: false,
            getValueFn: (index, dataType) => dataType.dateTime ? EnhancedScatterChart.displayTimestamp(index) : index,
            forcedTickCount: options.forcedTickCount,
            useTickIntervalForDisplayUnits: true,
            isCategoryAxis: true, // scatter doesn"t have a categorical axis, but this is needed for the pane to react correctly to the x-axis toggle one/off
            scaleType: options.categoryAxisScaleType,
            axisDisplayUnits: options.categoryAxisDisplayUnits
        });

        this.xAxisProperties.axis
            .tickSize(-this.viewportIn.height)
            .tickSizeOuter(EnhancedScatterChart.OuterPadding);

        this.xAxisProperties.axisLabel = this.data.axesLabels.x;

        const combinedYDomain: number[] = axis.combineDomain(
            this.optimizeTranslateValues(options.forcedYDomain),
            [minY, maxY]
        );

        const yAxisFormatString: string = valueFormatter.getFormatStringByColumn(data.yCol);

        this.yAxisProperties = axis.createAxis({
            pixelSpan: this.viewportIn.height,
            dataDomain: combinedYDomain,
            metaDataColumn: data.yCol,
            formatString: yAxisFormatString,
            outerPadding: EnhancedScatterChart.OuterPadding,
            isScalar: true,
            isVertical: true,
            getValueFn: (index, dataType) => dataType.dateTime ? EnhancedScatterChart.displayTimestamp(index) : index,
            forcedTickCount: options.forcedTickCount,
            useTickIntervalForDisplayUnits: true,
            isCategoryAxis: false,
            scaleType: options.valueAxisScaleType,
            axisDisplayUnits: options.valueAxisDisplayUnits,
        });

        this.yAxisProperties.axisLabel = this.data.axesLabels.y;

        return [
            this.xAxisProperties,
            this.yAxisProperties
        ];
    }