in src/visualStrategy/baseVisualStrategy.ts [279:372]
private createAxis(options: CreateAxisOptions): IAxisProperties {
const pixelSpan: number = options.pixelSpan,
dataDomain: number[] = options.dataDomain,
metaDataColumn: DataViewMetadataColumn = options.metaDataColumn,
outerPadding: number = options.outerPadding || 0,
isCategoryAxis: boolean = !!options.isCategoryAxis,
isScalar: boolean = !!options.isScalar,
isVertical: boolean = !!options.isVertical,
useTickIntervalForDisplayUnits: boolean = !!options.useTickIntervalForDisplayUnits,
getValueFn: (index: number, type: ValueType) => any = options.getValueFn,
categoryThickness: number = options.categoryThickness,
formatString: string = valueFormatter.getFormatStringByColumn(metaDataColumn),
dataType: ValueType = AxisHelper.getCategoryValueType(metaDataColumn, isScalar),
isLogScaleAllowed: boolean = AxisHelper.isLogScalePossible(dataDomain, dataType),
scale: d3.ScaleLinear<number, number> = d3scale.scaleLinear(),
scaleDomain: number[] = [0, 1],
bestTickCount: number = dataDomain.length || 1,
borderWidth: number = columnChart.BaseColumnChart.getBorderWidth(options.borderSettings);
let chartWidth: number = pixelSpan - borderWidth * (bestTickCount - 1);
if (chartWidth < MekkoChart.MinOrdinalRectThickness) {
chartWidth = MekkoChart.MinOrdinalRectThickness;
}
scale
.domain(scaleDomain)
.range([0, chartWidth]);
const formatter: IValueFormatter = BaseVisualStrategy.createFormatter(
scaleDomain,
dataDomain,
dataType,
isScalar,
formatString,
bestTickCount,
dataDomain,
getValueFn,
useTickIntervalForDisplayUnits);
let axisFn = isVertical ? axisLeft : axisBottom;
const axis: d3.Axis<any> = axisFn(scale)
.tickSize(6)
.ticks(bestTickCount)
.tickValues(dataDomain);
let formattedTickValues: any[] = [];
if (metaDataColumn) {
formattedTickValues = BaseVisualStrategy.formatAxisTickValues(
axis,
dataDomain,
formatter,
dataType,
isScalar,
getValueFn);
}
let xLabelMaxWidth: any;
if (!isScalar && categoryThickness) {
xLabelMaxWidth = Math.max(
1,
categoryThickness - MekkoChart.TickLabelPadding * BaseVisualStrategy.TickLabelPaddingFactor);
}
else {
const labelAreaCount: number = dataDomain.length > 1
? dataDomain.length + 1
: dataDomain.length;
xLabelMaxWidth = labelAreaCount > 1
? pixelSpan / labelAreaCount
: pixelSpan;
xLabelMaxWidth = Math.max(
1,
xLabelMaxWidth - MekkoChart.TickLabelPadding * BaseVisualStrategy.TickLabelPaddingFactor);
}
return {
scale,
axis,
formatter,
isCategoryAxis,
xLabelMaxWidth,
categoryThickness,
outerPadding,
isLogScaleAllowed,
values: formattedTickValues,
axisType: dataType,
axisLabel: null,
usingDefaultDomain: false
};
}