import { Tag } from "./ui"; import { AppIcon } from "./PixelIcons"; import type { MacroPayload } from "../lib/api"; /** 殖利率曲線小圖:留白充足、線條偏細,縮小時用 viewBox 等比縮放 */ export default function YieldCurve({ yc }: { yc?: MacroPayload["yieldCurve"] }) { if (!yc?.yields?.length || !yc.maturities?.length) return
暫無殖利率曲線資料。
; const ys = yc.yields; const labels = yc.maturities; const min = Math.min(...ys, ...(yc.prevYields || [])); const max = Math.max(...ys, ...(yc.prevYields || [])); const span = max - min || 1; const W = 360; const H = 128; const padL = 28; const padR = 20; const padT = 22; const padB = 28; const plotW = W - padL - padR; const plotH = H - padT - padB; const x = (i: number) => padL + (plotW * i) / Math.max(1, labels.length - 1); const y = (v: number) => padT + plotH * (1 - (v - min) / span); const path = (arr: number[]) => arr.map((v, i) => `${x(i)},${y(v)}`).join(" "); const yTicks = 3; const gridYs = Array.from({ length: yTicks + 1 }, (_, i) => padT + (plotH * i) / yTicks); return (