일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- trivial solution
- linear dependence
- Big-Oh notation
- solutions of matrix equation
- 배열 섞기
- matrix fo a linear transformation
- 코틀린 Hello World!
- matrix trnasformations
- python
- 랜덤 순서 배열
- matrix-vector product
- nontrivial solution
- Big Theta
- 빅세타
- 빅오 표기법
- itertools
- 코틀린 시작하기
- Big-O 예제
- Big Omega
- 빅오메가
- Big-Oh 예제
- recursive algorithms
- 일차변환
- 재귀함수
- NumPy
- nonhomogeneous linear system
- 알고리즘 분석의 실례
- one-to-one
- 이진 탐색
- homogeneous linear system
- Today
- Total
코딩 연습
(파이썬) 꺽은선 그래프 그리기 본문
------------
사전 설치 작업
------------
파이썬을 이용하여 그래프를 그리려면 먼저 해당 패키지를 설치해야 한다. 이러한 패키지를 모아서 한 번에 설치하게 해주는 것이 바로 anaconda이다. 따라서 우리는 먼저 anaconda를 설치해야 한다. anaconda는 여기 에서 다운로드 받을 수 있다. 윈도우의 경우에는 다운로드 파일을 그냥 실행시켜주면 되고, 리눅스의 경우는 다운로드된 파일이 있는 디렉토리도 이동하여
bash Anaconda3-2.3.*-Linux-x86 _ 64.sh
명령을 실행해 주면 된다. (물론 * 부분은 자신이 다운로드 받은 버전에 맞게 수정)
이후에 나오는 질문에 대해서는 모두 yes 라고 치고 엔터키를 누르면 된다.
그리고 나서 sympy 를 설치하기 위해 다음의 명령을 실행한다.
conda install sympy
마지막으로 matplotlib-venn 을 설치하기 위해 다음의 명령을 실행한다.
pip install matplotlib-venn
이렇게 하면 그래프를 그리기 위한 준비가 끝난다.
본격적으로 그래프를 그려보자.
그래프를 그리기 위해서 2014년 1월 ~ 12월 까지의 서울지역 평균 습도 데이터를 KOSIS(국가통계사이트)에서 얻었다.
\[[50.0, \; 52.0, \;60.0,\; 60.0,\; 59.0,\; 73.0,\; 74.0,\; 77.0,\; 69.0,\; 63.0,\; 61.0,\; 56.0]\]
자 이제 그래프를 그려보자.
------------
그래프 그리기
------------
먼저 그래프를 그리기 위해서 pylab 에서 plot과 show를 가져온다.
그리고 \(y\) 에 12달의 평균습도 데이터를 리스트로 입력한다.
그 다음 plot(y) 로 그래프를 생성한다.
이렇게 되면 그래프가 생성되기만 하고 보이지는 않는다.
따라서 show() 로 그래프 창을 띄워야 한다.
>>> from pylab import plot, show
>>> y = [50.0, 52.0, 60.0, 60.0, 59.0, 73.0, 74.0, 77.0, 69.0, 63.0, 61.0, 56.0]
>>> plot(y)
>>> show()
-------------------
축의 범위 설저 및 조정하기
-------------------
위 그래프의 문제는 월표시가 제대로 되지 않는데에 있다. 우리가 plot(y) 라고만 했기 때문에 각 월에 해당하는 값을 0~11까지로 해서 그래프를 그리는 것이다. (리스트의 인덱스를 x 축의 눈금으로 사용한다.) 이 문제를 해결하기 위해서는 다음과 같은 작업이 필요하다.
>>> x=range(1, 13)
>>> plot(x, y)
>>> show()
이제 1월 부터 12월 까지가 제대로 된 그래프를 얻을 수 있다. 하지만 y 축의 범위가 (50, 80) 이기 때문에 습도에 많은 차이가 나는 것 처럼 보인다. 이 문제를 해결하려면 다음과 같이 pylab 에서 axis 를 import 해야 한다.
>>> from pylab import axis
>>> axis()
(0.0, 12.0, 50.0, 80.0)
axis() 의 결과로 보여지는 (0.0, 12.0, 50.0, 80.0) 은 각각 (xmin, xmax, ymin, ymax) 를 나타낸다.
>>> axis(xmin=1, ymin=0)
(1, 12.0, 0, 80.0)
>>> show()
위와 같이 xmin 과 ymin 을 다시 설정해 주면 아래와 같은 그래프를 얻을 수 있다.
----------------
값을 점으로 표시하기
----------------
만약에 습도 값들을 점으로 표시하고 싶다면 다음과 같이 하면 된다.
>>> plot(x, y, marker="o")
만약 그래프를 점만으로 나타내고 싶다면 다음과 같이 하면 된다.
>>> plot(x, y, "o")
--------------------
그래프 제목, 축 이름 붙이기
--------------------
이제 그래프에 제목과 축 이름을 붙여보자. 그러기 위해서는 먼저 pylab으로 부터 title, xlabel, ylabel을 불러와야 한다.
>>> from pylab import title, xlabel, ylabel
>>> title('average monthly humidity in Seoul, 2014')
>>> xlabel('Month')
>>> ylabel('Humidity')
>>> show()
-------------------------------
하나의 그래프에 여러 가지 데이터 표시하기
-------------------------------
서울의 평균 습도 이외에 대전, 부산의 평균 습도를 한꺼번에 하나의 그래프에 표시하고 싶으면 다음과 같이 legend를 이용하면 된다.
>>> from pylab import legend
>>> seoul = [50.0, 52.0, 60.0, 60.0, 59.0, 73.0, 74.0, 77.0, 69.0, 63.0, 61.0, 56.0]
>>> daejeon = [65.0, 63.0, 64.0, 61.0, 62.0, 77.0, 83.0, 87.0, 78.0, 76.0, 77.0, 75.0]
>>> busan = [41.0, 62.0, 60.0, 59.0, 68.0, 80.0, 85.0, 86.0, 75.0, 68.0, 61.0, 50.0 ]
>>> month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> plot(month, seoul, month, daejeon, month, busan, marker="o")
>>> axis(xmin=1, ymin=0)
>>> title('average monthly humidity in Seoul, Daejeon, Busan (2014)')
>>> xlabel('Month')
>>> ylabel('Humidity')
>>> legend(['Seoul', 'Daejeon', 'Busan'], loc='best')
>>> show()
일단 pylab 에서 legend 를 import 하고, legend 에는 리스트의 형태로 [ ] 안에 각 데이터에 해당하는 이름을 넣어준다. 이때 순서는 plot(month, seoul, month, daejeon, month, busan, marker="o") 에서의 순서와 동일하게 매칭시키면 된다. 마지막에 loc 는 이 라벨이 나타날 위치를 지정해 주는 역할을 하는데, 'best'로 지정하면 말 그대로 가장 좋은 위치에 배치를 하게 된다. 이외에도 loc에는 'lower center', 'center left', 'upper left' 등을 사용할 수 있다. 이렇게 하고 나면 다음과 같은 그래프를 얻을 수 있다.
-----------------------
그래프를 그림 파일로 저장하기
-----------------------
이 글에서 보여지는 그래프들을 그림 파일로 저장하기 위해서는 여러 가지 캡쳐 소프트웨어를 사용할 수도 있겠지만 그래프를 그림 파일로 저장하는 기능도 파이썬이 제공해주고 있다. 이를 위해서는 다음과 같이 pylab 에서 savefig 를 불러와야 한다.
>>> from pylab import plot, savefig
>>> seoul = [50.0, 52.0, 60.0, 60.0, 59.0, 73.0, 74.0, 77.0, 69.0, 63.0, 61.0, 56.0]
>>> month = range(1, 13)
>>> plot(month, seoul, marker="o")
>>> savefig('humid_seoul.png')
------------------------------------------
파이썬 아이들(idle)이 아닌 *.py 를 이용하여 그래프 그리기
------------------------------------------
위에서는 파이썬 아이들에서 한 줄씩 입력해 가며 그래프를 그렸지만, 이런 일련의 작업들을 파일로 만들어 저장한 후, 실행하는 것도 가능하다. 그러기 위해서는 다음과 같이 seoul_humidity.py 라는 파일을 만들고, matplotlib.pyplot 를 import 해야 한다. 이것은 matplotlib 패키지로부터 pyplot 모듈을 모두 import 하는 것이므로 하나하나 import 할 필요가 없다. 훨씬 편하게 그래프를 그릴 수 있다.
import matplotlib.pyplot
def graph():
seoul = [50.0, 52.0, 60.0, 60.0, 59.0, 73.0, 74.0, 77.0, 69.0, 63.0, 61.0, 56.0]
month = range(1, 13)
matplotlib.pyplot.plot(month, seoul, marker="o")
matplotlib.pyplot.show()
if __name__=="__main__":
graph()
이후 터미널에서 python seoul_humidity.py 를 입력 후, 엔터키를 누르면 그래프가 그려지는 것을 확인할 수 있다. (윈도우의 경우 cmd 나 powershell 에서 하면 된다.)
이때, matplotlib.pyplot 가 너무 길어서 사용시 불편을 겪는다면 다음과 같이 import matplotlib.pyplot as mplp 로 import 한 후, 이후에는 matplotlib.pyplot 대산 mplp 를 사용하면 된다.
import matplotlib.pyplot as mplp
def graph():
seoul = [50.0, 52.0, 60.0, 60.0, 59.0, 73.0, 74.0, 77.0, 69.0, 63.0, 61.0, 56.0]
month = range(1, 13)
mplp.plot(month, seoul, marker="o")
mplp.show()
if __name__=="__main__":
graph()
'Python' 카테고리의 다른 글
(파이썬) 막대 그래프 그리기 (0) | 2016.03.15 |
---|---|
(파이썬) 함수식을 이용한 이차함수의 그래프 그리기 (2) | 2016.03.15 |
(파이썬) 복소수 & 복소수의 연산 (0) | 2016.03.15 |
(파이썬) 분수의 표현과 그 연산 (0) | 2016.03.15 |
(파이썬) 최대공약수 구하기 (0) | 2016.03.15 |