제안 시스템

디자인킷 · 그래프

월별 예산 흐름 막대(성수기 강조 + 수요 눈금)

D-그래프-월별예산흐름

월별 예산 흐름 막대(성수기 강조 + 수요 눈금)

언제 쓰는가

연간 예산을 달마다 어떻게 나눠 쓰는지와 그 근거(검색 수요)를 한 그림에. 연간 운영안, 분기 집행 계획. 시점 12개(분기면 4개), 성수기 구간 1개. 막대와 눈금은 같은 단위(연간 합계 대비 %)를 써서 축을 하나로 유지. 값 바꾸는 법: 막대 height = 예산 비중 ÷ 16 × 200(축 최댓값 16%), y = 250 − height, x 중심 = 71 + 86 × 월 순번, 폭 56. 수요 눈금(class tk) y = 250 − 수요 비중 ÷ 16 × 200, 좌우 36px. 성수기 막대만 class a, 값 글자 class on. 위 꺾쇠(path class al)는 성수기 첫 막대 왼쪽 끝에서 마지막 막대 오른쪽 끝까지, 문구의 비율 = 성수기 예산 비중 합.

참고

Porter Metrics 예산 진행(pacing) 리포트 템플릿(https://portermetrics.com/en/dashboard-software/marketing-campaign-budget/)의 기간별 예산 막대와 Guideline의 플라이트 계획 글(https://www.guideline.ai/blog/plan-better-media-flights-with-verified-market-spend), 불릿 차트의 기준 눈금 표기 참고. 금액 대신 비중으로 직접 제작.

조각

<div class="dk dk-bflow">
<div class="dk-card">
<p class="ttl"><span>월별 예산 비중과 검색 수요 비중 · 연간 합계 100%</span><span class="lg"><span><i class="c-g2"></i>예산 비중</span><span><i class="c-a"></i>성수기 예산</span><span><i class="c-t"></i>검색 수요 비중</span></span></p>
<svg width="1088" height="278" viewBox="0 0 1088 278" role="img">
<line x1="0" y1="250" x2="1088" y2="250" class="ax"/>
<rect x="43" y="200" width="56" height="50" rx="3" class="g2"/>
<text x="71" y="242" text-anchor="middle" class="v">4%</text>
<text x="71" y="270" text-anchor="middle">1월</text>
<line x1="35" y1="185" x2="107" y2="185" class="tk"/>
<rect x="129" y="187.5" width="56" height="62.5" rx="3" class="g2"/>
<text x="157" y="242" text-anchor="middle" class="v">5%</text>
<text x="157" y="270" text-anchor="middle">2월</text>
<line x1="121" y1="180" x2="193" y2="180" class="tk"/>
<rect x="215" y="150" width="56" height="100" rx="3" class="g2"/>
<text x="243" y="242" text-anchor="middle" class="v">8%</text>
<text x="243" y="270" text-anchor="middle">3월</text>
<line x1="207" y1="161.3" x2="279" y2="161.3" class="tk"/>
<rect x="301" y="112.5" width="56" height="137.5" rx="3" class="g2"/>
<text x="329" y="242" text-anchor="middle" class="v">11%</text>
<text x="329" y="270" text-anchor="middle">4월</text>
<line x1="293" y1="135" x2="365" y2="135" class="tk"/>
<rect x="387" y="75" width="56" height="175" rx="3" class="a"/>
<text x="415" y="242" text-anchor="middle" class="on">14%</text>
<text x="415" y="270" text-anchor="middle" class="v">5월</text>
<line x1="379" y1="101.3" x2="451" y2="101.3" class="tk"/>
<rect x="473" y="62.5" width="56" height="187.5" rx="3" class="a"/>
<text x="501" y="242" text-anchor="middle" class="on">15%</text>
<text x="501" y="270" text-anchor="middle" class="v">6월</text>
<line x1="465" y1="80" x2="537" y2="80" class="tk"/>
<rect x="559" y="100" width="56" height="150" rx="3" class="a"/>
<text x="587" y="242" text-anchor="middle" class="on">12%</text>
<text x="587" y="270" text-anchor="middle" class="v">7월</text>
<line x1="551" y1="90" x2="623" y2="90" class="tk"/>
<rect x="645" y="137.5" width="56" height="112.5" rx="3" class="g2"/>
<text x="673" y="242" text-anchor="middle" class="v">9%</text>
<text x="673" y="270" text-anchor="middle">8월</text>
<line x1="637" y1="130" x2="709" y2="130" class="tk"/>
<rect x="731" y="162.5" width="56" height="87.5" rx="3" class="g2"/>
<text x="759" y="242" text-anchor="middle" class="v">7%</text>
<text x="759" y="270" text-anchor="middle">9월</text>
<line x1="723" y1="156.3" x2="795" y2="156.3" class="tk"/>
<rect x="817" y="175" width="56" height="75" rx="3" class="g2"/>
<text x="845" y="242" text-anchor="middle" class="v">6%</text>
<text x="845" y="270" text-anchor="middle">10월</text>
<line x1="809" y1="170" x2="881" y2="170" class="tk"/>
<rect x="903" y="187.5" width="56" height="62.5" rx="3" class="g2"/>
<text x="931" y="242" text-anchor="middle" class="v">5%</text>
<text x="931" y="270" text-anchor="middle">11월</text>
<line x1="895" y1="177.5" x2="967" y2="177.5" class="tk"/>
<rect x="989" y="200" width="56" height="50" rx="3" class="g2"/>
<text x="1017" y="242" text-anchor="middle" class="v">4%</text>
<text x="1017" y="270" text-anchor="middle">12월</text>
<line x1="981" y1="182.5" x2="1053" y2="182.5" class="tk"/>
<path d="M387,30 V24 H615 V30" class="al"/>
<text x="501" y="14" text-anchor="middle" class="va">성수기 3개월에 연간 예산의 41%</text>
<text x="289" y="104.5" text-anchor="end" class="k">수요보다 한 달 먼저 증액</text>
</svg>
<p class="note">예시 수치는 가상 값 · 실제 집계 값과 출처, 집계 기간으로 교체</p>
</div>
</div>

스타일

.dk-bflow .dk-card{padding:22px 32px 20px}
.dk-bflow .ttl{display:flex;justify-content:space-between;align-items:baseline;font-size:var(--f-cap);font-weight:600;color:var(--mu);margin:0 0 var(--s3)}
.dk-bflow .lg{display:flex;gap:var(--s4);font-weight:400}
.dk-bflow .lg span{display:flex;align-items:center;gap:6px}
.dk-bflow .lg i{display:block;width:12px;height:12px;border-radius:3px}
.dk-bflow .lg i.c-a{background:var(--ac)}
.dk-bflow .lg i.c-w{background:var(--acw)}
.dk-bflow .lg i.c-s{background:var(--soft)}
.dk-bflow .lg i.c-g1{background:var(--g1)}
.dk-bflow .lg i.c-g2{background:var(--g2)}
.dk-bflow .lg i.c-g3{background:var(--g3)}
.dk-bflow .lg i.c-g4{background:var(--g4)}
.dk-bflow .lg i.c-o{background:none;border:2px solid var(--ac)}
.dk-bflow .lg i.c-e{background:var(--soft);border:1px dashed var(--g3)}
.dk-bflow .lg i.c-t{width:14px;height:3px;border-radius:0;background:var(--ink)}
.dk-bflow .note{font-size:var(--f-cap);color:var(--mu);margin:var(--s3) 0 0}
.dk-bflow svg{display:block}
.dk-bflow svg text{font-family:inherit;font-size:13px;fill:var(--mu);font-variant-numeric:tabular-nums}
.dk-bflow svg .a{fill:var(--ac)}
.dk-bflow svg .aw{fill:var(--acw)}
.dk-bflow svg .sf{fill:var(--soft)}
.dk-bflow svg .g1{fill:var(--g1)}
.dk-bflow svg .g2{fill:var(--g2)}
.dk-bflow svg .g3{fill:var(--g3)}
.dk-bflow svg .g4{fill:var(--g4)}
.dk-bflow svg .ax{stroke:var(--line2);stroke-width:1;fill:none}
.dk-bflow svg .gr{stroke:var(--line);stroke-width:1;fill:none}
.dk-bflow svg .tg{stroke:var(--g3);stroke-width:1;stroke-dasharray:4 4;fill:none}
.dk-bflow svg text.k{fill:var(--ink2)}
.dk-bflow svg text.v{fill:var(--ink);font-weight:600}
.dk-bflow svg text.va{fill:var(--ac);font-weight:700}
.dk-bflow svg text.on{fill:var(--card);font-weight:600}
.dk-bflow svg text.big{font-size:24px;font-weight:700}
.dk-bflow svg text.md{font-size:16px}
.dk-bflow svg .ln{fill:none;stroke:var(--g4);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.dk-bflow svg .ln.hot{stroke:var(--ac)}
.dk-bflow svg .ln.sub{stroke:var(--g2);stroke-width:2}
.dk-bflow svg .dot{fill:var(--ac);stroke:var(--card);stroke-width:2}
.dk-bflow svg .dot.m{fill:var(--g4)}
.dk-bflow svg .dot.s{fill:var(--g2)}
.dk-bflow svg .ol{fill:none;stroke:var(--ac);stroke-width:2.5}
.dk-bflow svg .al{stroke:var(--ac);stroke-width:1.5;fill:none}
.dk-bflow svg .tk{stroke:var(--ink);stroke-width:2.5}