- + + + )} -
Date: Tue, 22 Jul 2025 18:49:48 +0800 Subject: [PATCH 2/5] Expand chart area when sidebar hidden --- src/App.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.jsx b/src/App.jsx index 7384d59..d105d5e 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -400,7 +400,7 @@ function App() { )}
From 8feff9b6171ebe901e57120429b162afccd530d9 Mon Sep 17 00:00:00 2001 From: JavaZero <71128095+JavaZeroo@users.noreply.github.com> Date: Tue, 22 Jul 2025 20:19:57 +0800 Subject: [PATCH 3/5] Limit y-axis padding --- src/components/ChartContainer.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ChartContainer.jsx b/src/components/ChartContainer.jsx index 495c99f..4b0ac55 100644 --- a/src/components/ChartContainer.jsx +++ b/src/components/ChartContainer.jsx @@ -326,7 +326,7 @@ export default function ChartContainer({ display: true, title: { display: true, text: 'Value' }, bounds: 'data', - grace: '20%', + grace: '5%', ticks: { callback: function (value) { return Number(value.toPrecision(2)); From c1d565251b58a99bf4c3a50a9e385e67f637e047 Mon Sep 17 00:00:00 2001 From: JavaZero <71128095+JavaZeroo@users.noreply.github.com> Date: Tue, 22 Jul 2025 20:20:03 +0800 Subject: [PATCH 4/5] Adjust y-axis range --- src/components/ChartContainer.jsx | 67 +++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/src/components/ChartContainer.jsx b/src/components/ChartContainer.jsx index 4b0ac55..9c6038e 100644 --- a/src/components/ChartContainer.jsx +++ b/src/components/ChartContainer.jsx @@ -214,6 +214,25 @@ export default function ChartContainer({ return result; }; + const calculateYRange = useCallback((dataArray) => { + let min = Infinity; + let max = -Infinity; + dataArray.forEach(item => { + item.data.forEach(point => { + if (point.y < min) min = point.y; + if (point.y > max) max = point.y; + }); + }); + if (min === Infinity || max === -Infinity) { + return { min: 0, max: 1 }; + } + if (min === max) { + return { min: min - 1, max: max + 1 }; + } + const pad = (max - min) * 0.05; + return { min: min - pad, max: max + pad }; + }, []); + const chartOptions = useMemo(() => ({ responsive: true, maintainAspectRatio: false, @@ -326,7 +345,6 @@ export default function ChartContainer({ display: true, title: { display: true, text: 'Value' }, bounds: 'data', - grace: '5%', ticks: { callback: function (value) { return Number(value.toPrecision(2)); @@ -429,6 +447,15 @@ export default function ChartContainer({ const dataArray = metricDataArrays[key] || []; const showComparison = dataArray.length === 2; + const yRange = calculateYRange(dataArray); + const options = { + ...chartOptions, + scales: { + ...chartOptions.scales, + y: { ...chartOptions.scales.y, min: yRange.min, max: yRange.max } + } + }; + let stats = null; if (showComparison) { const normalDiff = getComparisonData(dataArray[0].data, dataArray[1].data, 'normal'); @@ -442,6 +469,30 @@ export default function ChartContainer({ }; } + let comparisonChart = null; + if (showComparison) { + const compData = createComparisonChartData(dataArray[0], dataArray[1], key); + const compRange = calculateYRange(compData.datasets); + const compOptions = { + ...chartOptions, + scales: { + ...chartOptions.scales, + y: { ...chartOptions.scales.y, min: compRange.min, max: compRange.max } + } + }; + comparisonChart = ( + + + + ); + } + return (
@@ -450,20 +501,10 @@ export default function ChartContainer({ onRegisterChart={registerChart} onSyncHover={syncHoverToAllCharts} data={createChartData(dataArray)} - options={chartOptions} + options={options} /> - {showComparison && ( - - - - )} + {comparisonChart} {stats && (

{key} 差值统计

From 0534e2aec2c077e26e219c9d45151e9308db1537 Mon Sep 17 00:00:00 2001 From: JavaZero <71128095+JavaZeroo@users.noreply.github.com> Date: Tue, 22 Jul 2025 20:26:22 +0800 Subject: [PATCH 5/5] Adjust y-axis range based on visible x-range --- src/components/ChartContainer.jsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/ChartContainer.jsx b/src/components/ChartContainer.jsx index 9c6038e..aa316e3 100644 --- a/src/components/ChartContainer.jsx +++ b/src/components/ChartContainer.jsx @@ -219,8 +219,13 @@ export default function ChartContainer({ let max = -Infinity; dataArray.forEach(item => { item.data.forEach(point => { - if (point.y < min) min = point.y; - if (point.y > max) max = point.y; + const inRange = + (xRange.min === undefined || point.x >= xRange.min) && + (xRange.max === undefined || point.x <= xRange.max); + if (inRange) { + if (point.y < min) min = point.y; + if (point.y > max) max = point.y; + } }); }); if (min === Infinity || max === -Infinity) { @@ -231,7 +236,7 @@ export default function ChartContainer({ } const pad = (max - min) * 0.05; return { min: min - pad, max: max + pad }; - }, []); + }, [xRange]); const chartOptions = useMemo(() => ({ responsive: true,