안녕하세요~
피벗테이블에서 상반기 하반기 합계가 안되서 어쩔 수 없이 별도 표를 만들어서 그래프를 만드려고 합니다.
그래프에서 상반기와 하반기 합계를 꺾은선 그래프로 하려고 합니다.
그런데 이렇게 하면 상반기/하반기 사이에 꺾은선 그래프 점이 생기는 것이 아니라 상반기 위/하반기 위에서 점이 생기더라구요.
| 연도 | 반기 | 고객A | 고객B | 고객C | 합계 |
| 2023 | 上 | 1 | 2 | 3 | 21 |
| 下 | 4 | 5 | 6 | ||
| 2024 | 上 | 7 | 8 | 9 | 57 |
| 下 | 10 | 11 | 12 | ||
| 2025 | 上 | 13 | 14 | 15 | 93 |
| 下 | 16 | 17 | 18 | ||
| 2026 | 上 | 19 | 20 | 21 | 60 |
> 상반기 위에 점 생김
| 연도 | 반기 | 고객A | 고객B | 고객C | 합계 |
| 2023 | 上 | 1 | 2 | 3 | |
| 下 | 4 | 5 | 6 | 21 | |
| 2024 | 上 | 7 | 8 | 9 | |
| 下 | 10 | 11 | 12 | 57 | |
| 2025 | 上 | 13 | 14 | 15 | |
| 下 | 16 | 17 | 18 | 93 | |
| 2026 | 上 | 19 | 20 | 21 | 60 |
> 하반기 위에 점 생김
그래서 쳇 GPT나 제미나이에게 물어보니 가운데 빈칸을 넣으라고 하는데 이렇게 하면 상/하 사이에 공간이 엄청 남아서 그래프가 이상해보이더라구요
| 연도 | 반기 | 고객A | 고객B | 고객C | 합계 |
| 2023 | 上 | 1 | 2 | 3 | |
| 21 | |||||
| 下 | 4 | 5 | 6 | ||
| 2024 | 上 | 7 | 8 | 9 | |
| 57 | |||||
| 下 | 10 | 11 | 12 | ||
| 2025 | 上 | 13 | 14 | 15 | |
| 93 | |||||
| 下 | 16 | 17 | 18 | ||
| 2026 | 上 | 19 | 20 | 21 | 60 |
> 상/하 사이에 빈 공간이 생김
제가 원하는 것처럼 첫번째나 두번째 사진에서 상/하반기 사이에 점이 생길 수 있게 하는 방법이 있을까요?
안녕하세요~
엑셀에서 기본적으로 제공하는 차트로는 어려운 작업입니다.
아래와 같이 수식 → Python 삽입으로 적용해 보세요.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from excel import FontPath
#// 한글 폰트
plt.rcParams["font.family"] = FontProperties(fname=FontPath.KOREAN).get_name()
plt.rcParams["axes.unicode_minus"] = False
#// 데이터 읽기
df = xl("A1:F8", headers=True)
df["연도"] = df["연도"].ffill()
A = pd.to_numeric(df["고객A"], errors="coerce").fillna(0)
B = pd.to_numeric(df["고객B"], errors="coerce").fillna(0)
C = pd.to_numeric(df["고객C"], errors="coerce").fillna(0)
sumY = pd.to_numeric(df["합계"], errors="coerce").dropna()
x = np.arange(len(df))
xSum = np.arange(0.5, len(df), 2)
fig, ax1 = plt.subplots(figsize=(10,5))
w = 0.22
ax1.bar(x-w, A, width=w, label="고객A")
ax1.bar(x, B, width=w, label="고객B")
ax1.bar(x+w, C, width=w, label="고객C")
ax2 = ax1.twinx()
ax2.plot(xSum, sumY, marker="o", linewidth=2, label="합계")
labels = (df["연도"].astype("Int64").astype(str) + df["반기"]).tolist()
ax1.set_xticks(x)
ax1.set_xticklabels(labels)
ax1.set_title("반기별 고객 실적 및 합계")
h1,l1=ax1.get_legend_handles_labels()
h2,l2=ax2.get_legend_handles_labels()
ax1.legend(h1+h2,l1+l2)
plt.tight_layout()
plt.show()