코딩 연습

(파이썬) 꺽은선 그래프 그리기 본문

Python

(파이썬) 꺽은선 그래프 그리기

코딩아저씨 2016. 3. 15. 16:20
반응형

------------

사전 설치 작업

------------

파이썬을 이용하여 그래프를 그리려면 먼저 해당 패키지를 설치해야 한다. 이러한 패키지를 모아서 한 번에 설치하게 해주는 것이 바로 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()


반응형


Comments