디자인킷 · 그래프
전후 비교 묶음 막대와 증감 화살표
D-그래프-전후묶음막대-증감화살표
언제 쓰는가
여러 지표의 전과 후를 나란히 놓고 증감률을 화살표로 짚는 장면. 개선 성과 요약, 레퍼런스 사례. 지표 3~5개, 같은 단위(건수 또는 지수)끼리만. 증가 폭이 가장 큰 지표 하나만 강조색. 값 바꾸는 법: 묶음 중심 x = 136 + 272 × 순번(지표 5개면 간격 218, 시작 109). 막대 height = 건수 ÷ 120 × 204(축 최댓값 120, 값에 맞게 교체), y = 246 − height, 폭 78. 증감률 = (후 ÷ 전 − 1) × 100. 화살표 path: 전 막대 위 10px 지점에서 후 막대 위 16px·왼쪽 30px 지점까지. 감소 지표는 화살표가 아래로 향하고 "−12%" 표기.
참고
Storytelling with Data(https://www.storytellingwithdata.com)의 전후 비교 막대와 변화율 주석 방식, 컨설팅 장표의 증감 화살표(growth arrow) 관행(https://deckary.com/blog/present-data-effectively-powerpoint), Financial Times Visual Vocabulary(https://github.com/Financial-Times/chart-doctor/tree/main/visual-vocabulary) Magnitude 분류의 paired column 참고. 직접 제작.
조각
<div class="dk dk-ba"> <div class="dk-card"> <p class="ttl"><span>주간 평균 건수 · 개편 전 4주와 개편 후 4주</span><span class="lg"><span><i class="c-g2"></i>개편 전</span><span><i class="c-g4"></i>개편 후</span></span></p> <svg width="1088" height="280" viewBox="0 0 1088 280" role="img"> <line x1="0" y1="246" x2="1088" y2="246" class="ax"/> <rect x="54" y="174.6" width="78" height="71.4" rx="3" class="g2"/> <text x="93" y="196.6" text-anchor="middle" class="v md">42</text> <rect x="140" y="147.4" width="78" height="98.6" rx="3" class="g4"/> <text x="179" y="169.4" text-anchor="middle" class="on md">58</text> <path d="M93,164.6 L149,131.4 M144.9,138.3 L149,131.4 L141,131.7" class="arw"/> <text x="179" y="135.4" text-anchor="middle" class="v md">+38%</text> <text x="136" y="270" text-anchor="middle" class="k md">상담 신청</text> <rect x="326" y="193.3" width="78" height="52.7" rx="3" class="g2"/> <text x="365" y="215.3" text-anchor="middle" class="v md">31</text> <rect x="412" y="157.6" width="78" height="88.4" rx="3" class="a"/> <text x="451" y="179.6" text-anchor="middle" class="on md">52</text> <path d="M365,183.3 L421,141.6 M417.7,148.9 L421,141.6 L413.1,142.7" class="arw h"/> <text x="451" y="145.6" text-anchor="middle" class="va md">+68%</text> <text x="408" y="270" text-anchor="middle" class="v md">구매 완료</text> <rect x="598" y="99.8" width="78" height="146.2" rx="3" class="g2"/> <text x="637" y="121.8" text-anchor="middle" class="v md">86</text> <rect x="684" y="69.2" width="78" height="176.8" rx="3" class="g4"/> <text x="723" y="91.2" text-anchor="middle" class="on md">104</text> <path d="M637,89.8 L693,53.2 M689.2,60.3 L693,53.2 L685,53.8" class="arw"/> <text x="723" y="57.2" text-anchor="middle" class="v md">+21%</text> <text x="680" y="270" text-anchor="middle" class="k md">장바구니 담기</text> <rect x="870" y="137.2" width="78" height="108.8" rx="3" class="g2"/> <text x="909" y="159.2" text-anchor="middle" class="v md">64</text> <rect x="956" y="125.3" width="78" height="120.7" rx="3" class="g4"/> <text x="995" y="147.3" text-anchor="middle" class="on md">71</text> <path d="M909,127.2 L965,109.3 M959.5,115.1 L965,109.3 L957.1,107.8" class="arw"/> <text x="995" y="113.3" text-anchor="middle" class="v md">+11%</text> <text x="952" y="270" text-anchor="middle" class="k md">회원 가입</text> </svg> <p class="note">예시 수치는 가상 값 · 실제 집계 값과 출처, 집계 기간으로 교체</p> </div> </div>
스타일
.dk-ba .dk-card{padding:22px 32px 20px}
.dk-ba .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-ba .lg{display:flex;gap:var(--s4);font-weight:400}
.dk-ba .lg span{display:flex;align-items:center;gap:6px}
.dk-ba .lg i{display:block;width:12px;height:12px;border-radius:3px}
.dk-ba .lg i.c-a{background:var(--ac)}
.dk-ba .lg i.c-w{background:var(--acw)}
.dk-ba .lg i.c-s{background:var(--soft)}
.dk-ba .lg i.c-g1{background:var(--g1)}
.dk-ba .lg i.c-g2{background:var(--g2)}
.dk-ba .lg i.c-g3{background:var(--g3)}
.dk-ba .lg i.c-g4{background:var(--g4)}
.dk-ba .lg i.c-o{background:none;border:2px solid var(--ac)}
.dk-ba .lg i.c-e{background:var(--soft);border:1px dashed var(--g3)}
.dk-ba .lg i.c-t{width:14px;height:3px;border-radius:0;background:var(--ink)}
.dk-ba .note{font-size:var(--f-cap);color:var(--mu);margin:var(--s3) 0 0}
.dk-ba svg{display:block}
.dk-ba svg text{font-family:inherit;font-size:13px;fill:var(--mu);font-variant-numeric:tabular-nums}
.dk-ba svg .a{fill:var(--ac)}
.dk-ba svg .aw{fill:var(--acw)}
.dk-ba svg .sf{fill:var(--soft)}
.dk-ba svg .g1{fill:var(--g1)}
.dk-ba svg .g2{fill:var(--g2)}
.dk-ba svg .g3{fill:var(--g3)}
.dk-ba svg .g4{fill:var(--g4)}
.dk-ba svg .ax{stroke:var(--line2);stroke-width:1;fill:none}
.dk-ba svg .gr{stroke:var(--line);stroke-width:1;fill:none}
.dk-ba svg .tg{stroke:var(--g3);stroke-width:1;stroke-dasharray:4 4;fill:none}
.dk-ba svg text.k{fill:var(--ink2)}
.dk-ba svg text.v{fill:var(--ink);font-weight:600}
.dk-ba svg text.va{fill:var(--ac);font-weight:700}
.dk-ba svg text.on{fill:var(--card);font-weight:600}
.dk-ba svg text.big{font-size:24px;font-weight:700}
.dk-ba svg text.md{font-size:16px}
.dk-ba svg .ln{fill:none;stroke:var(--g4);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.dk-ba svg .ln.hot{stroke:var(--ac)}
.dk-ba svg .ln.sub{stroke:var(--g2);stroke-width:2}
.dk-ba svg .dot{fill:var(--ac);stroke:var(--card);stroke-width:2}
.dk-ba svg .dot.m{fill:var(--g4)}
.dk-ba svg .dot.s{fill:var(--g2)}
.dk-ba svg .ol{fill:none;stroke:var(--ac);stroke-width:2.5}
.dk-ba svg .al{stroke:var(--ac);stroke-width:1.5;fill:none}
.dk-ba svg .arw{fill:none;stroke:var(--g3);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.dk-ba svg .arw.h{stroke:var(--ac)}