[st] feat: HB 통계 검증 차트 수정
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user