티스토리 뷰
Project : Py_EX
Python file : EX02_sineplot.py (이어서)
IDE : PyCharm [설치방법]
이전 글 참조
이전 글에서 사인함수 그래프를 그려보았는데, 모양새가 썩 맘에 들지 않아서 오늘은 그래프의 폼을 조금 잡아보려고 한다. 배우는 단계에서 기능을 모두 사용해 보는 것은 너무 오래 걸리기도 하고 시간낭비라고 생각한다. 나도 모든 기능을 다 알지도 못할 뿐더러 안다고 해도 오래 외우지도 못하고 있을 것 뻔 하며, 필요한 기능은 필요할 때 그때그때 찾아보고 사용하면 된다는 주의라서, 이번에도 그래프를 그릴 때 참조한 위키피디아 그래프와 비슷하게 바꿔보는 선에서 사용법만 간단히 익혀보자. 다시 말하지만 개인적으로 더 필요한 기능이 있다면 찾아서 사용해 보면서 익히는 것이 제일 좋다.
## 선 색깔, 두께 변경
# setp
선 색을 빨간색으로, 조금 더 두껍게 변경해 보자. 이전 글에서 작성했던 코딩에서 plot 을 임의의 변수(lines)에 저장하고 setp 함수를 이용하여 변수에 저장된 그래프에 옵션을 주는 형식이다. 역시, matlab과 사용 방식이 유사하다.
import numpy as np
from matplotlib import pyplot as plt
start = 0
end = 2 * np.pi
dx = 1000
x = np.linspace(start, end, dx)
lines = plt.plot(x, np.sin(x))
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)
이런 식으로 그래프에 옵션을 부여할 수가 있다. 결과는 아래와 같다. 참고로 이 외에도 선 색을 바꿀 수 있는 여러가지 방법이 있으며, 여기서 사용한 것은 내가 matlab에서 가장 많이 사용하던 방식과 같아서 사용한 것이다. plot(x, y, color='red', linewidth=2.0) 처럼 plot 에 바로 옵션을 주어도 같은 결과를 얻을 수 있고, 이외 또 다른 여러가지 형식들로 옵션을 지정할 수 있다. 쓰고보니 위 방식이 더 나은것 같아. 다음부턴 plot 에 바로 옵션을 주는 방식으로 써야겠다. 이처럼 본인에게 가장 편한놈으로 하나 정해서 사용하면 되겠다. 어쨌든 결과는 같으니깐.
## 눈금선 생성
# grid
위 코드에서 제일 아래에 한 줄 추가하자. 간단하게 결과를 출력해 볼 수 있다.
plt.grid(True)
## X, Y축 단위 변경
# xtick, ytick
그래프의 단위를 0에서 6까지 7개로 쪼개진 것이 아닌, 0에서 2π까지 9개로 쪼개진 단위로 변경해보자. 위 코드의 아래에 또 아래의 두 줄을 추가해서 실행해보자.
xticks_array = np.linspace(0, 2*np.pi, 9)
plt.xticks(xticks_array)
plt.yticks([-1, -1/2, 0, 1/2, 1])
단위가 소수점으로 나와서 썩 마음에 들지 않는다. 위키피디아 그래프 처럼 깔끔하게 정수, 분수로 나오게 하려면 조금 더 마음에 들지 않는 방법을 사용해야 하는데, 좀 더 깔끔한 방법이 있다면 소개 부탁드린다. 어쨌든 깔끔하지 않더라도 목적을 위해 위 코드를 아래와 같이 바꿔보자.
plt.xticks(xticks_array, [r'$0$', r'$1/4\pi$', r'$1/2\pi$', r'$3/4\pi$', r'$\pi$', r'$5/4\pi$', r'$3/2\pi$', r'$7/4\pi$', r'$2\pi$'])
plt.yticks([-1, -1/2, 0, 1/2, 1], ['-1', '-1/2', '0', '1/2', '1'])
X축과 Y축의 범위가 일단은 깔끔하게 바뀌었다. (분수 표현은 어떻게 하는지 모르겠다)
## 그래프 범위 변경
# xlim, ylim
그래프의 X, Y축 범위가 딱 떨어지게 바꿔보자. 위키피디아 그래프와는 조금 차이가 있지만 그래도 일단 진행.
plt.xlim([0, 2 * np.pi])
plt.ylim([-1.3, 1.3])
## 그래프 크기 변경
# figure(figsize)
위키피디아의 그래프는 납작하다. 그리고 나서 마우스 드래그로 크기를 변경해도 되지만, 그렇게 되면 할 때마다 같은 사이즈로 만들기가 어렵다. 또한 레포트에 그림으로 붙여넣기를 했다면 사이즈 변경 시 글자의 비율도 멍청이가 되어버리는 사태를 맞이할 수 있다. 이를 피해보기 위해 출력되는 그래프의 사이즈를 조정하고 싶다면 plot 의 윗줄에 다음 코드를 추가해보자. 여기에서 사이즈 (7.5, 2.6)은 대충 몇 번 해봐서 위키피디아 그래프와 크기비율을 맞추어 본 것이니 큰 의미는 없다.
plt.figure(figsize=(7.5, 2.6))
## 중간 점검
일단 여기까지 하고 타겟이랑 비교 한번 해보자.
목표하는 그래프 모양이 납작해서 나도 납작하게 만들었다. X축 위치와, 축 방향표시, 축 이름이 빠졌지만 나름 비슷하다.
## X축 위치 변경 및 프레임(뼈대) 제거
# ax = plt.gca(), spines, xaxis, yaxis
조금 더 비슷하게 따라가 보자. X축의 위치를 Y축의 0의 위치에 가져도 놓고, 아래/위/오른쪽의 프레임도 제거해보자.
ax = plt.gca() # 현재의 Axes를 가져온다
ax.spines['right'].set_visible(False) # 오른쪽 뼈대 제거
ax.spines['top'].set_visible(False) # 위쪽 뼈대 제거
ax.spines['left'].set_position('zero') # 왼쪽 뼈대를 X축의 0에 위치 (이 예제에서는 안해도 됨)
ax.spines['bottom'].set_position('zero') # 아래쪽 뼈대를 Y축의 0에 위치
ax.xaxis.set_ticks_position('bottom') # 아래쪽 뼈대를 X축으로 설정
ax.yaxis.set_ticks_position('left') # 왼쪽 뼈대를 Y축으로 설정 (이 예제에서는 안해도 됨)
# 전체 코드
import numpy as np
from matplotlib import pyplot as plt
# 데이터 생성
start = 0
end = 2 * np.pi
dx = 1000
x = np.linspace(start, end, dx)
# 그래프 그리기
plt.figure(figsize=(7.5, 2.6)) # 그래프 크기를 설정
lines = plt.plot(x, np.sin(x)) # 데이터로 그래프를 그림
plt.setp(lines, 'color', 'r', 'linewidth', 2.0) # 그래프의 색과 두께를 변경
plt.grid(True) # 그래프 격자 생성
x_array = np.linspace(0, 2 * np.pi, 9) # x축 단위로 사용할 데이터 생성
plt.xticks(x_array,
[r'$0$', r'$1/4\pi$', r'$1/2\pi$', r'$3/4\pi$', r'$\pi$'
, r'$5/4\pi$', r'$3/2\pi$', r'$7/4\pi$', r'$2\pi$']) # x축 단위 변경
plt.yticks([-1, -1 / 2, 0, 1 / 2, 1], ['-1', '-1/2', '0', '1/2', '1']) # y축 단위 변경
plt.xlim([0, 2 * np.pi]) # x축 범위 변경
plt.ylim([-1.3, 1.3]) # y축 범위 변경
ax = plt.gca() # 현재의 Axes를 가져온다
ax.spines['right'].set_visible(False) # 오른쪽 뼈대 제거
ax.spines['top'].set_visible(False) # 위쪽 뼈대 제거
ax.spines['left'].set_position('zero') # 왼쪽 뼈대를 X축의 0에 위치 (이 예제에서는 안해도 됨)
ax.spines['bottom'].set_position('zero') # 아래쪽 뼈대를 Y축의 0에 위치
ax.xaxis.set_ticks_position('bottom') # 아래쪽 뼈대를 X축으로 설정
ax.yaxis.set_ticks_position('left') # 왼쪽 뼈대를 Y축으로 설정 (이 예제에서는 안해도 됨)
'Engineering > Python' 카테고리의 다른 글
[Python] 행렬 만들고 연산까지 해보기2 (1) | 2020.09.15 |
---|---|
[Python] 행렬 만들고 연산까지 해보기1 (1) | 2020.09.14 |
[Python] 사인함수 그래프 그려보기 (0) | 2020.09.05 |
[Python] 사인함수(삼각함수) 사용해보기 (0) | 2020.09.05 |
[Python] math.pi 대신 pi로 원주율(π) 사용하기 (0) | 2020.07.12 |
- Total
- Today
- Yesterday
- PI
- Console 삭제
- 파이썬
- pyplot
- 한글
- 갤럭시 워치
- 액티브2
- 그래프
- 터미널 실행
- numpy
- 행렬의 곱
- 모듈
- 파이참
- 콘솔
- PyCharm
- qt designer
- Python
- Python 콘솔에서 실행
- pyQT5
- 맛집
- 배곧
- 갤럭시 워치 액티브2
- 단위행렬
- Sine
- linalg
- 언어팩
- 기존 콘솔
- 콘솔창 삭제
- 행렬
- sin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |