제안 시스템

디자인킷 · 그래프

예산 배분 전후 띠(현재 → 제안, 이동 표시)

D-그래프-배분전후띠

예산 배분 전후 띠(현재 → 제안, 이동 표시)

언제 쓰는가

지금의 예산 배분을 어떻게 바꾸자는 것인지 두 줄의 100% 띠와 그 사이 연결면으로 보여 주는 장면. 미디어 믹스 조정 제안. 매체 3~5개(순서는 두 줄 동일). 가장 크게 늘리는 매체 하나만 강조색. 값 바꾸는 법: 1% = 9.78px(100% = 978px), 띠 x 시작 110. 조각 width = 비중 × 9.78 − 2, 위 띠 y 40, 아래 띠 y 186, 높이 56. 연결면 polygon = 위 조각의 아래 두 끝(y 96)과 아래 조각의 위 두 끝(y 186). 증감 = 제안 − 현재(포인트). 비중 5% 미만 조각은 이름이 이웃과 겹치므로 "기타"로 합침. 강조 조각만 class a, 연결면 class aw, 이름·증감 class va.

참고

Supermetrics 유료 매체 믹스 대시보드(https://supermetrics.com/blog/looker-studio-examples)의 채널 구성 비교와 Looker Studio 차트 선택 안내(https://hs.improvado.io/hubfs/AI-Generated%20Media/PDF/looker_studio_chart_decision_tree.pdf)의 "구성 + 비교는 누적 막대", Financial Times Visual Vocabulary(https://github.com/Financial-Times/chart-doctor/tree/main/visual-vocabulary) Part-to-whole 분류 참고. 두 띠를 연결면으로 이어 이동을 보이는 구성은 직접 제작.

조각

<div class="dk dk-shift">
<div class="dk-card">
<p class="ttl"><span>매체별 예산 비중 · 현재 배분과 제안 배분 · 각 100%</span></p>
<svg width="1088" height="292" viewBox="0 0 1088 292" role="img">
<text x="0" y="74" class="v md">현재</text>
<text x="0" y="222" class="v md">제안</text>
<polygon points="110,96 645.9,96 499.2,186 110,186" class="sf"/>
<rect x="110" y="40" width="535.9" height="56" rx="2" class="g4"/>
<text x="379" y="75" text-anchor="middle" class="on md">55%</text>
<text x="379" y="28" text-anchor="middle" class="k">검색 광고</text>
<rect x="110" y="186" width="389.2" height="56" rx="2" class="g4"/>
<text x="305.6" y="221" text-anchor="middle" class="on md">40%</text>
<text x="305.6" y="264" text-anchor="middle" class="k">검색 광고</text>
<text x="305.6" y="284" text-anchor="middle" class="v">−15p</text>
<polygon points="647.9,96 792.6,96 743.7,186 501.2,186" class="sf"/>
<rect x="647.9" y="40" width="144.7" height="56" rx="2" class="g3"/>
<text x="721.3" y="75" text-anchor="middle" class="on md">15%</text>
<text x="721.3" y="28" text-anchor="middle" class="k">SNS 광고</text>
<rect x="501.2" y="186" width="242.5" height="56" rx="2" class="g3"/>
<text x="623.4" y="221" text-anchor="middle" class="on md">25%</text>
<text x="623.4" y="264" text-anchor="middle" class="k">SNS 광고</text>
<text x="623.4" y="284" text-anchor="middle" class="v">+10p</text>
<polygon points="794.6,96 841.5,96 890.4,186 745.7,186" class="aw"/>
<rect x="794.6" y="40" width="46.9" height="56" rx="2" class="a"/>
<text x="819.1" y="75" text-anchor="middle" class="on md">5%</text>
<text x="819.1" y="28" text-anchor="middle" class="va">영상 광고</text>
<rect x="745.7" y="186" width="144.7" height="56" rx="2" class="a"/>
<text x="819.1" y="221" text-anchor="middle" class="on md">15%</text>
<text x="819.1" y="264" text-anchor="middle" class="va">영상 광고</text>
<text x="819.1" y="284" text-anchor="middle" class="va">+10p</text>
<polygon points="843.5,96 1037.1,96 1007.8,186 892.4,186" class="sf"/>
<rect x="843.5" y="40" width="193.6" height="56" rx="2" class="g2"/>
<text x="941.3" y="75" text-anchor="middle" class="v md">20%</text>
<text x="941.3" y="28" text-anchor="middle" class="k">디스플레이</text>
<rect x="892.4" y="186" width="115.4" height="56" rx="2" class="g2"/>
<text x="951.1" y="221" text-anchor="middle" class="v md">12%</text>
<text x="951.1" y="264" text-anchor="middle" class="k">디스플레이</text>
<text x="951.1" y="284" text-anchor="middle" class="v">−8p</text>
<polygon points="1039.1,96 1086,96 1086,186 1009.8,186" class="sf"/>
<rect x="1039.1" y="40" width="46.9" height="56" rx="2" class="g1"/>
<text x="1063.6" y="75" text-anchor="middle" class="v md">5%</text>
<text x="1063.6" y="28" text-anchor="middle" class="k">기타</text>
<rect x="1009.8" y="186" width="76.2" height="56" rx="2" class="g1"/>
<text x="1048.9" y="221" text-anchor="middle" class="v md">8%</text>
<text x="1048.9" y="264" text-anchor="middle" class="k">기타</text>
<text x="1048.9" y="284" text-anchor="middle" class="v">+3p</text>
</svg>
<p class="note">예시 수치는 가상 값 · 실제 집계 값과 출처, 집계 기간으로 교체</p>
</div>
</div>

스타일

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