[파이썬 plot 디자인 설정하기 2편](출처 : scipy lecturenote) |
[이전 포스팅]
파이썬 matplotlib를 활용한 그래프 그리기
2020/02/20 - [matplot] - 파이썬 matplotlib를 활용한 그래프 그리기
파이썬 plot 디자인 설정하기 1편
2020/02/20 - [matplot] - 파이썬 plot 디자인 설정하기 1편
파이썬 plot 디자인 설정 두번째 포스팅입니다.
지난번에 삼각함수를 그래프로 출력하고 선색, 두께, 좌표축 등을 설정하는 내용을 설명드렸습니다.
지난번 그래프 설정에도 불구하고 뭔가 부족한 부분이 많이 있어보입니다.
매트랩이나 엑셀로 그리는게 오히려 낫지 않나라는 생각도 들 수 있구요^^
그래서 파이썬만의 강력함, 특징을 보여줄 수 있는 그래프 설정방법을 소개해 드립니다.
먼저 y=sin(x) 그래프를 생성합니다.
import numpy as np # numpy 호출
import matplotlib.pyplot as plt # pyplot 호출
plt.figure(figsize=(5, 5), dpi=100) # figsize = 그래프 크기, dpi = dot per inch
plt.subplot(1, 1, 1)
x = np.linspace(-np.pi, np.pi, 300, endpoint=True) # 삼각함수에 입력될 x값 생성(배열)
y= np.sin(x) # 삼각함수 계산 y=cos(x)
plt.plot(x, y, color="blue", linewidth=2.0, linestyle="-") #plot에 x,y 입력
plt.xlim(x.min(), x.max()) # plot의 x축 최대값 설정
plt.ylim(y.min(), y.max()) # plot의 y축 최대값 설정
plt.xticks(np.linspace(x.min(), x.max(), 9, endpoint=True)) # x축값 표시방식 설정
plt.yticks(np.linspace(y.min(), y.max(), 5, endpoint=True)) # y축값 표시방식 설정
plt.show() # 그래프 출력
위 그래프는 삼각함수 그래프라고 보기엔 좌표값, 범례가 없습니다.
먼저 x,y 좌표축 값을 바꾸어 보겠습니다. 우리에게 익숙한 형식으로.
기존의 plt.xticks를 아래와 같이 변경하면 그래프도 아래와 같이 변경됩니다.
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
위 코드가 얼핏 복잡해 보이지만 그렇지 않습니다. plt.xticks에 인수로 들어간 앞에 배열과 두번째 배열이 서로 매칭된 것입니다. 마찬가지로 y축도 -1,0,1을 문자열로 매칭시켜 좌표축에 표시합니다.
그래도 뭔가 어색합니다. x, y축이 정위치가 아닌 것 같습니다. 축의 위치도 바꿔봅니다.
ax = plt.gca() # 현재 축위치 호출
ax.spines['right'].set_color('none') # 표 박스선 설정
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # x축을 bottom 라인으로 설정
ax.yaxis.set_ticks_position('left') # y축을 left 라인으로 설정
ax.spines['bottom'].set_position(('data',0)) # x축을 0값에 정렬
ax.spines['left'].set_position(('data',0)) # y축을 0값에 정렬
원래 그래프를 보면 사각형 검정실선 안에 들어가 있는데 그 사각형 박스가 left, right, top, bottom 축으로 구성되어있는 구조입니다. 우리가 원하는 x,y 좌표로 표현하려면 4개 실선중에 2개를 지우고 나머지 두개의 위치를 변경해야 합니다.
세부과정은 아래와 같습니다.
ax = plt.gca()
축의 위치를 호출하여 ax로 설정 (축 위치변경을 위해 필요한 과정)
ax.spines['right'].setcolor('none')
ax.spines['top'].setcolor('none')
표 상부, 오른쪽에 위치한 축의 컬러를 무색으로 바꿉니다. 안보이게 하는거죠.
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
나머지 bottom, left축을 x,y축으로 설정합니다.
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
좀전에 설정한 x,y축의 위치를 '0' 기준으로 이동시킵니다.
이제 좀 우리가 원하는 모양이 된 것 같습니다.
마지막으로 범례를 넣어주겠습니다.
plt.plot(x, y, color="blue", linewidth=2.5, linestyle="-", label="sine")
plt.legend(loc='upper left')
처음 선언했던 plt.plot에 label이라는 인수를 추가하고 plt.legend()를 실행하면
입력한 위치(upper left)에 범례가 입력됩니다.
입력가능한 위치
- best
- upper right, upper left
- lower left, lower right
- right, center
- center left, center right
- lower center, upper center
이정도 그래프면 처음과 비교했을때 많이 세련되어 진 것 같습니다^^
'matplot' 카테고리의 다른 글
[Python] matplotlib를 활용한 3D 그래프 그리기 (1) | 2020.02.21 |
---|---|
[파이썬] matplotlib를 활용한 산점도 그래프 그리기 (0) | 2020.02.21 |
파이썬 plot 디자인 설정하기 1편 (0) | 2020.02.20 |
파이썬 matplotlib를 활용한 그래프 그리기 (1) | 2020.02.20 |
댓글