Python의 matplotlib에서 누적 막대 그래프를 만들고 데이터 레이블을 추가하려고했습니다.
17173 단어 그래프파이썬matplotlib시각화
matplotlib로 누적 막대 그래프를 그려보세요
동기 부여
누적 막대 그래프를 Python으로 그릴 때 엑셀처럼 데이터 라벨을 표시할 수 있으면 좋겠다고 생각하고 막상 조사해 보면 데이터 라벨을 표시할 수 있는 기사가 없고, 복사할 수 있는 코드도 없었습니다. 그래서 누적 막대 그래프에 데이터 라벨을 붙이려고했을 때 copipe 할 수있는 코드를 써 보았습니다.
덧붙여서, 스택 막대 그래프만 그리면 좋다면, 이 페이지의 맨 마지막에 있는 간단하게 스택 막대 그래프를 그리는 것을 참고해 주세요.
가져오기
다음 라이브러리를 가져옵니다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='IPAexGothic')
%matplotlib inline
더미 데이터 만들기
더미 데이터는 A, B, C 지점의 월별 매출 데이터를 작성했습니다.
dataset = pd.DataFrame([[100, 200, 50], [300, 400, 600], [50, 300, 60]],
columns=['A支店', 'B支店', 'C支店'],
index=['4月', '5月', '6月'])
A지점
B지점
C지점
4월
100
200
50
5월
300
400
600
6월
50
300
60
막대 그래프 그리기
우선 간단한 막대 그래프를 그려 보겠습니다.
각 지점의 월 매출을 합한 막대 그래프를 그려 봅시다.
그려 보았는데 좋지만 이것뿐이라면, 각 달에 얼마나 매출이 있는지 모릅니다. . .
그럴 때는 쌓아 놓은 막대 그래프를 사용합시다!
fig, ax = plt.subplots(figsize=(10, 8))
ax.bar(dataset.columns, dataset.sum())
plt.show()
누적 막대 그래프 그리기
누적 막대 그래프는 막대 그래프를 그릴 때와 마찬가지로 ax.bar()
를 사용합니다.
이 때의 인수 bottom
에 바의 베이스가 되는 y 좌표를 지정합니다.
누적 막대 그래프가 생겼습니다! ! ! 역시 데이터 라벨을 원합니다.
참고 사이트: htps // tp t b. rg/3.1.1/아피/_아s_겐/마 tpぉtぃb. 아 s. 아 s. 바 r. HTML
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(dataset.index)
plt.show()
누적 막대 그래프에 데이터 레이블 표시
드디어 여기에서가 본제입니다.
데이터 라벨은, plt.text()
로 x 좌표와 y 좌표를 지정해 삽입합니다.
그러면 좋은 느낌이 들었습니다!
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
for j in range(len(dataset.columns)):
plt.text(x=j,
y=dataset.iloc[:i, j].sum() + (dataset.iloc[i, j] / 2),
s=dataset.iloc[i, j],
ha='center',
va='bottom'
)
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(dataset.index)
plt.show()
100% 스택 막대 그래프 그리기
누적 막대 그래프를 사용할 때는 100% 누적 막대 그래프도 사용하고 싶어요.
우선 데이터를 가공합니다.
아래 코드는 지점별 판매를 백분율로 변환합니다.
plot_dataset = pd.DataFrame(index = dataset.index)
for col in dataset.columns:
plot_dataset[col] = round(100 * dataset[col] / dataset[col].sum(), 1)
A지점
B지점
C지점
4월
22.2
22.2
7.0
5월
66.7
444.
84.5
6월
11.1
33.3
8.5
변환된 데이터를 사용하여 100% 스택 막대 그래프를 그립니다.
코드는 이전 코드와 동일합니다. (변수만 변경하고 있습니다.)
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(plot_dataset)):
ax.bar(plot_dataset.columns,
plot_dataset.iloc[i],
bottom=plot_dataset.iloc[:i].sum()
)
for j in range(len(plot_dataset.columns)):
plt.text(x=j,
y=plot_dataset.iloc[:i, j].sum()+(plot_dataset.iloc[i, j]/2),
s=f'{plot_dataset.iloc[i, j]}%',
ha='center',
va='bottom'
)
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(plot_dataset.index)
plt.show()
쉽게 누적 막대 그래프 그리기
누적 막대 그래프를 그리는 것만으로는 아래의 코드로 간단하게 그릴 수 있습니다.
fig, ax = plt.subplots(figsize=(10, 8))
dataset.T.plot(kind='bar', stacked=True, ax=ax)
plt.show()
Reference
이 문제에 관하여(Python의 matplotlib에서 누적 막대 그래프를 만들고 데이터 레이블을 추가하려고했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/s_fukuzawa/items/6f9c1a3d4c4f98ae6eb1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='IPAexGothic')
%matplotlib inline
dataset = pd.DataFrame([[100, 200, 50], [300, 400, 600], [50, 300, 60]],
columns=['A支店', 'B支店', 'C支店'],
index=['4月', '5月', '6月'])
fig, ax = plt.subplots(figsize=(10, 8))
ax.bar(dataset.columns, dataset.sum())
plt.show()
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(dataset.index)
plt.show()
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
for j in range(len(dataset.columns)):
plt.text(x=j,
y=dataset.iloc[:i, j].sum() + (dataset.iloc[i, j] / 2),
s=dataset.iloc[i, j],
ha='center',
va='bottom'
)
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(dataset.index)
plt.show()
plot_dataset = pd.DataFrame(index = dataset.index)
for col in dataset.columns:
plot_dataset[col] = round(100 * dataset[col] / dataset[col].sum(), 1)
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(plot_dataset)):
ax.bar(plot_dataset.columns,
plot_dataset.iloc[i],
bottom=plot_dataset.iloc[:i].sum()
)
for j in range(len(plot_dataset.columns)):
plt.text(x=j,
y=plot_dataset.iloc[:i, j].sum()+(plot_dataset.iloc[i, j]/2),
s=f'{plot_dataset.iloc[i, j]}%',
ha='center',
va='bottom'
)
ax.set(xlabel='支店名', ylabel='売り上げ')
ax.legend(plot_dataset.index)
plt.show()
fig, ax = plt.subplots(figsize=(10, 8))
dataset.T.plot(kind='bar', stacked=True, ax=ax)
plt.show()
Reference
이 문제에 관하여(Python의 matplotlib에서 누적 막대 그래프를 만들고 데이터 레이블을 추가하려고했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s_fukuzawa/items/6f9c1a3d4c4f98ae6eb1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)