📍기본 설정
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Malgun Gothic' # Windows, Mac일 때는 AppleGothic
#matplotlib.rcParams['font.family'] = 'HYGungSo-Bold'# 궁서체
matplotlib.rcParams['font.size'] = 15 # 폰트 크기
matplotlib.rcParams['axes.unicode_minus'] = False # 한글 폰트 사용 시 마이너스 글자가 깨지는 것 방지
df = pd.read_excel('../Pandas/score.xlsx')
1. 막대 그래프 (심화)
1.1 수평으로 누운 그래프
labels = ['강백호', '서태웅', '정대만'] #이름
values = [190, 187, 184] #키
plt.barh(labels, values) #수평으로 누운 그래프
plt.xlim(175,195)
1.2 set_hatch
📌 아래 링크 참고
https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_style_reference.html
bar = plt.bar(labels, values)
bar[0].set_hatch('/') # ///으로 채워짐
bar[1].set_hatch('x') # xxxx
bar[2].set_hatch('..') #..
1.3 값 표시하기
bar = plt.bar(labels, values)
plt.ylim(175,195)
for idx, rect in enumerate(bar):
plt.text(idx, rect.get_height() + 0.5, values[idx], ha= 'center', color='blue')
2. DataFrame 활용
2.0 꺾은선 그래프
plt.plot(df['지원번호'], df['키'])
plt.plot(df['지원번호'], df['영어'])
plt.plot(df['지원번호'], df['수학'])
2.1 격자 표시하기
plt.plot(df['지원번호'], df['영어'])
plt.plot(df['지원번호'], df['수학'])
plt.grid() #격자가 표시됨
plt.plot(df['지원번호'], df['영어'])
plt.plot(df['지원번호'], df['수학'])
plt.grid(axis='x')
plt.plot(df['지원번호'], df['영어'])
plt.plot(df['지원번호'], df['수학'])
plt.grid(axis='y', color='purple', alpha=0.2, linestyle='--', linewidth=2)
3. 누적 막대 그래프
3.1 plt.bar
plt.bar(df['이름'], df['국어'])
plt.bar(df['이름'], df['영어'])
3.2 누적 막대 그래프
plt.bar(df['이름'], df['국어'])
plt.bar(df['이름'], df['영어'], bottom=df['국어']) #국어점수 위에 영어점수
plt.bar(df['이름'], df['영어'], bottom=df['국어']) #국어점수 위에 영어점수
plt.bar(df['이름'], df['국어'])
plt.bar(df['이름'], df['영어'], bottom=df['국어']) #국어점수 위에 영어점수
plt.bar(df['이름'], df['수학'], bottom=df['국어']+df['영어'])
plt.bar(df['이름'], df['국어'], label='국어')
plt.bar(df['이름'], df['영어'], bottom=df['국어'], label='영어') #국어점수 위에 영어점수
plt.bar(df['이름'], df['수학'], bottom=df['국어']+df['영어'], label='수학')
plt.xticks(rotation=60)
plt.legend()
4. 다중 막대 그래프
4.0 np.arange
np.arange(5)
np.arange(3, 6)
np.arange(3, 6)
arr = np.arange(5)
arr
arr + 100
arr * 3
4.1 다중 막대 그래프
N = df.shape[0]
index = np.arange(N)
index
w = 0.25
plt.bar(index-w, df['국어'])
plt.bar(index, df['영어'])
plt.bar(index+w, df['수학'])
w = 0.25
plt.bar(index-w, df['국어'], width=w)
plt.bar(index, df['영어'], width=w)
plt.bar(index+w, df['수학'], width=w)
w = 0.25
plt.bar(index-w, df['국어'], width=w, label='국어')
plt.bar(index, df['영어'], width=w, label='영어')
plt.bar(index+w, df['수학'], width=w, label='수학')
plt.legend()
w = 0.25
plt.bar(index-w, df['국어'], width=w, label='국어')
plt.bar(index, df['영어'], width=w, label='영어')
plt.bar(index+w, df['수학'], width=w, label='수학')
plt.legend(ncol=3)
plt.figure(figsize=(10, 5))
plt.title('학생별 성적')
w = 0.25
plt.bar(index-w, df['국어'], width=w, label='국어')
plt.bar(index, df['영어'], width=w, label='영어')
plt.bar(index+w, df['수학'], width=w, label='수학')
plt.legend(ncol=3)
plt.xticks(index, df['이름'], rotation=60)
plt.show()
5. 원 그래프 (기본)
5.1 원 그래프
values = [1, 1, 1, 1, 1, 1]
labels = ['Python', 'Java', 'Javascript', 'C#', 'C/C++', 'ETC']
plt.pie(values, labels = labels, autopct='%.1f') #소수점 첫째 자리까지
plt.show()
values = [30, 25, 20, 13, 10, 2]
labels = ['Python', 'Java', 'Javascript', 'C#', 'C/C++', 'ETC']
plt.pie(values, labels = labels, autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()
5.1 explode
values = [30, 25, 20, 13, 10, 2]
labels = ['Python', 'Java', 'Javascript', 'C#', 'C/C++', 'ETC']
explode = [0.2, 0.1, 0, 0, 0, 0]
plt.pie(values, labels=labels, explode = explode)
plt.show()
values = [30, 25, 20, 13, 10, 2]
labels = ['Python', 'Java', 'Javascript', 'C#', 'C/C++', 'ETC']
explode = [0.05]*6
plt.pie(values, labels=labels, explode = explode)
plt.show()
plt.pie(values, labels=labels, explode=explode)
plt.legend(loc=(1.2,0.3))
plt.show()
plt.pie(values, labels=labels, explode=explode)
plt.title('언어')
plt.legend(loc=(1.2,0.3), title='언어별 선호도')
plt.show()
6. 원 그래프 (심화)
6.0 기본 원 그래프
values = [30, 25, 20, 13, 10, 2]
labels = ['Python', 'Java', 'Javascript', 'C#', 'C/C++', 'ETC']
colors = ['#ffadad', '#ffd6a5', '#fdffb6', '#caffbf', '#9bf6ff', '#a0c4ff']
explode = [0.05]*6
plt.pie(values, labels = labels, autopct='%.1f%%', startangle=90, counterclock=False, colors=colors, explode=explode)
plt.show()
6.1 중간이 빈 원 그래프
wedgeprops = {'width':0.6}
plt.pie(values, labels = labels, autopct='%.1f%%', startangle=90, counterclock=False, colors=colors, explode=explode, wedgeprops=wedgeprops)
plt.show()
wedgeprops = {'width':0.6, 'edgecolor':'w', 'linewidth':5}
plt.pie(values, labels = labels, autopct='%.1f%%', startangle=90, counterclock=False, colors=colors,wedgeprops=wedgeprops)
plt.show()
⭐ pctdistance : 중심으로부터 값들의 거리
def customer_autopct(pct):
return '{:.0f}%'.format(pct) if pct>=10 else ''
#return ('%.1f%%' % pct) if pct >= 10 else ''
#return '{:.1f}%'.format(pct) if pct>=10 else ''
plt.pie(values, labels = labels, autopct=customer_autopct, startangle=90, counterclock=False, colors=colors,wedgeprops=wedgeprops, pctdistance=0.7)
plt.show()
def customer_autopct(pct):
return '{:.0f}%'.format(pct) if pct>=10 else ''
#return ('%.1f%%' % pct) if pct >= 10 else ''
#return '{:.1f}%'.format(pct) if pct>=10 else ''
plt.pie(values, labels = labels, autopct=customer_autopct, startangle=90, counterclock=False, colors=colors,wedgeprops=wedgeprops, pctdistance=1)
plt.show()
def customer_autopct(pct):
return '{:.0f}%'.format(pct) if pct>=10 else ''
#return ('%.1f%%' % pct) if pct >= 10 else ''
#return '{:.1f}%'.format(pct) if pct>=10 else ''
plt.pie(values, labels = labels, autopct=customer_autopct, startangle=90, counterclock=False, colors=colors,wedgeprops=wedgeprops, pctdistance=0.2)
plt.show()
6.2 DataFrame 활용
grp = df.groupby('학교')
values = [grp.size()['북산고'], grp.size()['능남고']]
labels = ['북산고', '능남고']
plt.pie(values, labels=labels)
plt.title('소속 학교')
plt.show()
'학회&동아리 > FORZA' 카테고리의 다른 글
[FORZA STUDY] 스타트 코딩 - 이것이 진짜 크롤링이다 기본편 week1 (0) | 2023.06.21 |
---|---|
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week6 (2) | 2023.05.27 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week4 (0) | 2023.05.14 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week3 (3) | 2023.05.08 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week2 (2) | 2023.04.09 |