본문 바로가기
self.python

[python] matplot 그래프 그리기 유용한 꿀팁! - (1)

by 톤토니 2022. 6. 12.
반응형

 

 

[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])

 

 

반응형

댓글