[python] matplot 그래프 그리기 유용한 꿀팁!
여러 그래프 x, y 좌표 범위 통일하기
여러 그래프 x, y 축 맨 끝만 표시하기
그래프 마커, 색깔 설정하기
x, y 축 범위 설정하기
x, y축 글씨 숨기기(tick 없애기)
데이터 라벨링 하기 & 위치 조정하기
그래프 title 작성하기
y축에 텍스트 쓰기
축 글씨 방향 변경하기
여러 그래프간의 간격 조절하기(상하좌우)
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)
df
2. 그래프 그리기
fig, ax = plt.subplots(2, 2, figsize=(11,8))
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])
# 그래프 마커, 색깔 설정하기
j += 1
연도별 각 학생의 점수를 plot 그래프로 나타내 보았다. 원하는 색깔을 color 라는 리스트에 담아 반복문을 이용하여 지정하였다. 그리고 마커는 o 로 지정해 주었다. v로 하면 삼각형 점으로 표시가 된다.
그러면 아직은 조금은 보기 힘든 그래프가 나온다.
- 먼저 y축 범위를 통일 시켜주는게 학생들의 성적을 비교할 때 좋을 것 같다. set_ylim(범위)
ax[i][k].set_ylim(35, 105)
2번째 for문 안에 set_ylim 으로 y값의 범위를 설정해 주었다. x값의 범위는 set_xlim 으로 하면 되는데
지금 사용하는 데이터의 경우에는 년도로 범위가 정해져있기 때문에 불필요하고, y값의 범위만 설정해보았다.
x 축은 동일하고, y축은 모두 35점 ~ 105 사이의 값으로 셋팅하여 전보다 보기 편해진 것 같다.
- x와 y축을 동일한 것을 사용하고 있으니 중간에 값은 지워보자. sharex = True, sharey = True
fig, ax = plt.subplots(2, 2, figsize=(11,8), sharex=True, sharey=True)
맨 첫 줄에 subplot을 설정하는 곳에서 sharex, sharey 를 True로 설정함으로써
그래프의 가장 바깥쪽에만 값이 쓰여지도록 했다.
- 데이터 라벨링을 해보자. text(x위치, y위치, 값)
for l in range(len(df)):
ax[i][k].text(x[l], y[l]+3, y[l])
text() 함수를 이용하여 각 점에 맞는 데이터 값을 라벨링 해주었다.
데이터 값이 아니라 다른 값을 넣고 싶다면 y[l] 대신에 그냥 값을 써주면 된다.
그리고 x[l], y[l] 은 각각의 데이터가 써 질 x와 y의 위치인데 y[l]로 하면 마커와 글씨가 너무 붙어있어서 +3 으로 조금 위로 벌려주었다.
* 참고 y[l] - 5 로 바꿨을 때
* 참고 y[l] 대신에 'self' 를 값에 넣었을 때. 이런식으로 원하는 대로 사용할 수 있다.
- x, y축 tick을 모두 지워보자. set_ticks([])
ax[i][k].axes.yaxis.set_ticks([])
ax[i][k].axes.xaxis.set_ticks([])
축을 굳이 표시할 필요가 없다면 set_ticks의 안에 아무것도 넣지 않음으로써 축을 지워버릴 수 도 있다.
3. 지금까지 정리
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])
'self.python' 카테고리의 다른 글
[python] 데이터프레임 데이터 타입 바꾸기 (0) | 2022.06.20 |
---|---|
[python] matplot 그래프 그리기 유용한 꿀팁! - (2) (0) | 2022.06.13 |
[python] matplotlib 그래프 여러 개 그리는 방법 (0) | 2022.06.06 |
[python] 데이터프레임 값에 apply 로 함수 적용하는 다양한 방법 (0) | 2022.06.01 |
[python] 0 으로 채워진 데이터 프레임 만들기! - zeros (0) | 2022.05.31 |
댓글