[st] feat: HB 통계 검증 차트 수정

This commit is contained in:
2026-03-30 11:52:30 +09:00
parent cc291243b0
commit 1a82d549f5
3 changed files with 36 additions and 4 deletions
@@ -179,7 +179,7 @@ const ImrVerificationHistory = () => {
stAnlsRsltApi.getImrResultList(selectedHistory!.anlsSn, {
page: 0,
size: 100,
sort: "rsltSn,asc",
sort: "admdstCd,asc",
}),
enabled: !!selectedHistory,
});
@@ -89,7 +89,7 @@ const HbVerificationDetail: React.FC<HbVerificationDetailProps> = ({
검증 결과 상세
</h3>
<div className="flex">
<div className="flex-[0.5] p-4">
<div className="flex-1 p-4">
<RegionalGrid
anlsSn={anlsSn}
vrfcTrgtSn={selectedVrfcTrgtSn}
@@ -102,7 +102,7 @@ const HbVerificationDetail: React.FC<HbVerificationDetailProps> = ({
appliedFilter={appliedFilter}
/>
</div>
<div className="flex flex-[0.5] flex-col gap-4 p-4 pt-[4.8rem]">
<div className="flex flex-col gap-4 p-4 pt-[4.8rem]">
<Indicators
anlsSn={anlsSn}
vrfcTrgtSn={selectedVrfcTrgtSn}
@@ -52,6 +52,32 @@ interface DataPoint extends LinePoint {
item: StAnlsRsltResponse;
}
/** 모든 점의 x·y를 합쳐 두 축이 같은 [min, max] 구간을 쓰도록 할 때 사용 */
function getUnifiedLinearRange(data: ChartData<"scatter">): {
min: number;
max: number;
} | null {
const values: number[] = [];
for (const ds of data.datasets) {
for (const pt of ds.data) {
if (pt && typeof pt === "object" && "x" in pt && "y" in pt) {
const p = pt as LinePoint;
if (Number.isFinite(p.x)) values.push(p.x);
if (Number.isFinite(p.y)) values.push(p.y);
}
}
}
if (values.length === 0) return null;
const min = Math.min(...values);
const max = Math.max(...values);
if (min === max) {
const pad = Math.abs(min) * 0.05 || 1;
return { min: min - pad, max: max + pad };
}
const padding = (max - min) * 0.02;
return { min: min - padding, max: max + padding };
}
function matchesAdmdstFilter(
admdstCd: string,
sidoCd: string | null | undefined,
@@ -172,6 +198,8 @@ const ScatterChart: React.FC<ScatterChartProps> = ({
],
};
const axisRange = getUnifiedLinearRange(data);
const options: ChartOptions<"scatter"> = {
responsive: true,
maintainAspectRatio: false,
@@ -230,6 +258,8 @@ const ScatterChart: React.FC<ScatterChartProps> = ({
x: {
type: "linear",
position: "bottom",
min: axisRange?.min,
max: axisRange?.max,
title: {
display: true,
text: "이전년도 값",
@@ -237,6 +267,8 @@ const ScatterChart: React.FC<ScatterChartProps> = ({
},
y: {
type: "linear",
min: axisRange?.min,
max: axisRange?.max,
title: {
display: true,
text: "당해년도 값",
@@ -267,7 +299,7 @@ const ScatterChart: React.FC<ScatterChartProps> = ({
</div>
</div>
) : chartConfig ? (
<div className="h-[48rem] w-full">
<div className="size-[52rem]">
<Scatter
data={chartConfig.data}
options={chartConfig.options}