Skip to content

Commit 512a6cd

Browse files
authored
fix(axis): use correct desired tick count based on axis type (#1646)
Fix the calculation of the max desired tick count for the X axis.
1 parent 65d0e7d commit 512a6cd

3 files changed

Lines changed: 22 additions & 22 deletions

File tree

Loading

packages/charts/src/chart_types/xy_chart/state/selectors/get_api_scale_configs.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ import { GroupId } from '../../../../utils/ids';
1515
import { convertXScaleTypes } from '../../domains/x_domain';
1616
import { coerceYScaleTypes } from '../../domains/y_domain';
1717
import { X_SCALE_DEFAULT, Y_SCALE_DEFAULT } from '../../scales/scale_defaults';
18-
import { isHorizontalAxis, isVerticalAxis } from '../../utils/axis_type_utils';
18+
import { isXDomain } from '../../utils/axis_utils';
1919
import { groupBy } from '../../utils/group_data_series';
2020
import { AxisSpec, BasicSeriesSpec, CustomXDomain, XScaleType, YDomainRange } from '../../utils/specs';
21-
import { isHorizontalRotation } from '../utils/common';
2221
import { getSpecDomainGroupId } from '../utils/spec';
2322
import { getAxisSpecsSelector, getSeriesSpecsSelector } from './get_specs';
2423
import { mergeYCustomDomainsByGroupId } from './merge_y_custom_domains';
@@ -54,19 +53,17 @@ export function getScaleConfigsFromSpecs(
5453
seriesSpecs: BasicSeriesSpec[],
5554
settingsSpec: SettingsSpec,
5655
): ScaleConfigs {
57-
const isHorizontalChart = isHorizontalRotation(settingsSpec.rotation);
58-
5956
// x axis
60-
const xAxes = axisSpecs.filter((d) => isHorizontalChart === isHorizontalAxis(d.position));
61-
const xTicks = xAxes.reduce<number>((acc, { ticks = X_SCALE_DEFAULT.desiredTickCount }) => {
57+
const xAxesSpecs = axisSpecs.filter((spec) => isXDomain(spec.position, settingsSpec.rotation));
58+
const maxTickCountForXAxes = xAxesSpecs.reduce<number>((acc, { ticks = X_SCALE_DEFAULT.desiredTickCount }) => {
6259
return Math.max(acc, ticks);
63-
}, X_SCALE_DEFAULT.desiredTickCount);
60+
}, -Infinity);
6461

6562
const xScaleConfig = convertXScaleTypes(seriesSpecs);
6663
const x: ScaleConfigs['x'] = {
6764
customDomain: settingsSpec.xDomain,
6865
...xScaleConfig,
69-
desiredTickCount: xTicks,
66+
desiredTickCount: Number.isFinite(maxTickCountForXAxes) ? maxTickCountForXAxes : X_SCALE_DEFAULT.desiredTickCount,
7067
};
7168

7269
// y axes
@@ -80,16 +77,19 @@ export function getScaleConfigsFromSpecs(
8077

8178
const customDomainByGroupId = mergeYCustomDomainsByGroupId(axisSpecs, settingsSpec.rotation);
8279

83-
const yAxes = axisSpecs.filter((d) => isHorizontalChart === isVerticalAxis(d.position));
80+
const yAxisSpecs = axisSpecs.filter((spec) => !isXDomain(spec.position, settingsSpec.rotation));
8481
const y = Object.keys(scaleConfigsByGroupId).reduce<ScaleConfigs['y']>((acc, groupId) => {
85-
const axis = yAxes.find((yAxis) => yAxis.groupId === groupId);
86-
const desiredTickCount = axis?.ticks ?? Y_SCALE_DEFAULT.desiredTickCount;
87-
const scaleConfig = scaleConfigsByGroupId[groupId];
88-
const customDomain = customDomainByGroupId.get(groupId);
82+
const maxTickCountYAxes = yAxisSpecs.reduce<number>((maxTickCount, yAxis) => {
83+
return yAxis.groupId === groupId
84+
? Math.max(maxTickCount, yAxis.ticks ?? Y_SCALE_DEFAULT.desiredTickCount)
85+
: maxTickCount;
86+
}, -Infinity);
87+
const desiredTickCount = Number.isFinite(maxTickCountYAxes) ? maxTickCountYAxes : Y_SCALE_DEFAULT.desiredTickCount;
88+
8989
if (!acc[groupId]) {
9090
acc[groupId] = {
91-
customDomain,
92-
...scaleConfig,
91+
customDomain: customDomainByGroupId.get(groupId),
92+
...scaleConfigsByGroupId[groupId],
9393
desiredTickCount,
9494
};
9595
}

storybook/stories/area/3_with_linear.story.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@ import { useBaseTheme } from '../../use_base_theme';
1717
export const Example = () => {
1818
const start = KIBANA_METRICS.metrics.kibana_os_load[0].data[0][0];
1919
const data = KIBANA_METRICS.metrics.kibana_os_load[0].data
20-
.slice(0, 20)
21-
.map((d) => [(d[0] - start) / 30000, clamp(d[1] - 10, 0, 3)]);
20+
.slice(0, 21)
21+
.map((d) => [(d[0] - start) / 30000, clamp(d[1], 0, 30)]);
2222
return (
2323
<Chart>
2424
<Settings baseTheme={useBaseTheme()} />
25-
<Axis id="bottom" title="index" position={Position.Bottom} />
25+
<Axis id="bottom" position={Position.Bottom} ticks={3} tickFormat={(d) => `${d} sec`} />
2626
<Axis
2727
id="left"
28-
title={KIBANA_METRICS.metrics.kibana_os_load[0].metric.title}
2928
position={Position.Left}
30-
tickFormat={(d) => `${Math.round(Number(d))}`}
31-
ticks={7}
29+
labelFormat={(d) => `${d.toFixed(0)}%`}
30+
tickFormat={(d) => `${d.toFixed(1)}%`}
31+
ticks={5}
3232
/>
3333

3434
<AreaSeries
35-
id="areas"
35+
id={KIBANA_METRICS.metrics.kibana_os_load[0].metric.title}
3636
xScaleType={ScaleType.Linear}
3737
yScaleType={ScaleType.Linear}
3838
yNice

0 commit comments

Comments
 (0)