[python] matplot 그래프 그리기 유용한 꿀팁!
여러 그래프 x, y 좌표 범위 통일하기
여러 그래프 x, y 축 맨 끝만 표시하기
그래프 마커, 색깔 설정하기
x, y 축 범위 설정하기
x, y축 글씨 숨기기(tick 없애기)
데이터 라벨링 하기 & 위치 조정하기
그래프 title 작성하기
y축에 텍스트 쓰기
축 글씨 방향 변경하기
여러 그래프간의 간격 조절하기(상하좌우)
- 이전 글에서...
2022.06.12 - [self.python] - [python] matplot 그래프 그리기 유용한 꿀팁! - (1)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
score = {'Year' : ['2016', '2017', '2018', '2019', '2020', '2021', '2022'],
'Mary': [90, 68, 70, 80, 92, 68, 78],
'Kate': [90, 68, 70, 80, 92, 68, 78],
'Mark': [39, 59, 60, 73, 84, 87, 92],
'Maxi': [83, 92, 71, 56, 79, 93, 85]}
df = pd.DataFrame(score)
fig, ax = plt.subplots(2, 2, figsize=(11,8), sharex=True, sharey=True)
color = ['steelblue', 'mediumaquamarine', 'grey', 'darksalmon']
x = df['Year'].tolist()
j = 1
for i in range(2):
for k in range(2):
y = df.iloc[:, j]
y = y.tolist()
ax[i][k].plot(x, y, marker='o', color=color[j-1])
ax[i][k].set_ylim(35, 105)
ax[i][k].axes.yaxis.set_ticks([])
ax[i][k].axes.xaxis.set_ticks([])
j = j +1
for l in range(len(df)):
ax[i][k].text(x[l], y[l]+3, y[l])
plt.show()
- 그래프 title 쓰기
그래프 전체에 대한 제목은 suptitle, 각각의 sub plot에 대한 제목은 set_title로 지정해주면 된다.
fig, ax = plt.subplots(2, 2, figsize=(11,8), sharex=True, sharey=True)
color = ['steelblue', 'mediumaquamarine', 'grey', 'darksalmon']
x = df['Year'].tolist()
j = 1
name = df.columns # sub plot 마다 각 학생의 이름으로 title 설정을 위해서 name이라는 리스트 선언
for i in range(2):
for k in range(2):
y = df.iloc[:, j]
y = y.tolist()
ax[i][k].plot(x, y, marker='o', color=color[j-1])
ax[i][k].set_ylim(35, 105)
ax[i][k].axes.yaxis.set_ticks([])
ax[i][k].axes.xaxis.set_ticks([])
ax[i][k].set_title(name[j]) # 각 그래프마다 학생 이름을 가져온다.
j = j +1
for l in range(len(df)):
ax[i][k].text(x[l], y[l]+3, y[l])
plt.suptitle('SCORE', fontsize = 30) # 이 그래프 전체에 대한 title
plt.show()
이렇게 전체에 대한 제목 'SCORE' 와 각각 plot에 대한 학생의 이름으로 title이 잘 설정되었음을 확인할 수 있다.
- subplot 그래프 간의 간격 조절하기
subplot의 여러 그래프가 tick도 없으니 좀 더 붙어있으면 보기 좋을 것 같다.
이런경우 plt.subplots_adjust(wspace = 0, hspace = 0) 으로 간격을 조정할 수 있다.
plt.subplots_adjust(wspace=0, hspace=0)
너비와 높이의 space 를 모두 0으로 주니 그래프끼리 딱 붙어버린 것을 볼 수 있다.
너비는 딱 붙이고 높이만 조금 떨어뜨려놓고 싶으면 hspace의 값을 조금 높여주면 된다.
plt.subplots_adjust(wspace=0, hspace=0.1)
hspace = 0.1 로 하니 딱 적당해보인다. 너비의 간격을 조정하고 싶으면 wsapce를 조정하면 된다.
- 그래프 두 줄에서 각 줄에 글자를 붙여보자. set_ylabel(글자, 회전, 그래프와 간격, 글자 사이즈)
윗 줄 학생들은 'top', 아래 줄 학생들은 'bottom' 이라는 글자를 붙여보자.
ylabel = ['top', 'bottom'] # 반복문 바깥쪽에
if k == 0 :
ax[i][k].set_ylabel(ylabel[i], rotation = 0, labelpad = 50, fontsize = 25)
두 번째 반복문 안에 k == 0 일때, ylabel을 붙인다면 [0][0] 그래프와, [1][0] 그래프에만 ylabel이 붙게 된다.
labelpad는 글자와 그래프간의 간격이다. 값을 낮추면 글자와 그래프가 겹칠 수 있다. 적당히 조정하면 된다.
- 글자의 방향을 바꿔보자. rotation
rotation은 방향을 변경하는 것이다. 글자를 수직으로 바꾸면 labelpad의 값을 더 낮출 수 있을 것 같다.
if k == 0 :
ax[i][k].set_ylabel(ylabel[i], rotation = 90, labelpad = 10, fontsize = 25)
총 정리
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
score = {'Year' : ['2016', '2017', '2018', '2019', '2020', '2021', '2022'],
'Mary': [90, 68, 70, 80, 92, 68, 78],
'Kate': [90, 68, 70, 80, 92, 68, 78],
'Mark': [39, 59, 60, 73, 84, 87, 92],
'Maxi': [83, 92, 71, 56, 79, 93, 85]}
df = pd.DataFrame(score) # 데이터프레임 형성
name = df.columns
fig, ax = plt.subplots(2, 2, figsize=(11,8), sharex=True, sharey=True)
color = ['steelblue', 'mediumaquamarine', 'grey', 'darksalmon']
ylabel = ['top', 'bottom']
x = df['Year'].tolist()
j = 1
for i in range(2):
for k in range(2):
y = df.iloc[:, j]
y = y.tolist()
ax[i][k].plot(x, y, marker='o', color=color[j-1])
ax[i][k].set_ylim(35, 105)
ax[i][k].axes.yaxis.set_ticks([])
ax[i][k].axes.xaxis.set_ticks([])
ax[i][k].set_title(name[j]) # subplot 각각의 제목 설정
if k == 0 : # 각 그래프 줄의 ylabel 설정
ax[i][k].set_ylabel(ylabel[i], rotation = 90, labelpad = 10, fontsize = 25)
j = j +1
for l in range(len(df)):
ax[i][k].text(x[l], y[l]+3, y[l])
plt.suptitle('SCORE', fontsize = 30) # 그래프 전체의 제목 설정
plt.subplots_adjust(wspace=0, hspace=0.1) # 각 그래프간의 간격 설정
plt.show()
지금은 의미없는 데이터로 해서 이렇게 그래프를 그려도 의미가 없지만...
다른 데이터로 유용하게 사용했던 기능들이다. 필요한 기능들을 적절히 사용할 수 있다면 훨씬 보기좋은 그래프를 그릴 수 있을것이다.
'self.python' 카테고리의 다른 글
[python] 데이터 프레임 합치기 - concat, append, join (0) | 2022.06.21 |
---|---|
[python] 데이터프레임 데이터 타입 바꾸기 (0) | 2022.06.20 |
[python] matplot 그래프 그리기 유용한 꿀팁! - (1) (0) | 2022.06.12 |
[python] matplotlib 그래프 여러 개 그리는 방법 (0) | 2022.06.06 |
[python] 데이터프레임 값에 apply 로 함수 적용하는 다양한 방법 (0) | 2022.06.01 |
댓글