06. Python기초 Draw Graph(그래프 그리기)
이번에는 제가 python을 선호하는 큰 이유 중 하나인 그래프 그리기, 점찍기 등에 대해서 설명하겠습니다.
제 개인적인 생각으로는 프로그램을 통해서 가장 쉽고 빠르게 그래프를 그릴 수 있는 건 Python이라고 생각합니다. C/C++ 등은 그래프를 그리기 위해서는 많이 힘들지만, 그런 면에서는 python이 잘 되어있다고 생각합니다. 물론 Matlab도 그리기가 쉽기는 하지만, python은 공짜이고 설치도 훨씬 빠르기 때문에 저는 Python으로 그래프 그리고 그림을 표현할 때, 많이 사용합니다.
간단한 예로, 아래처럼 되어 있는 예시를 온라인에서 쉽게 찾을 수 있습니다. 하지만 그냥 이렇게 쓰고 코딩을 run하면 아마도 오류가 날 것입니다. 왜냐하면 matplotlib가 설치 안되어 있기 때문입니다.
from matplotlib import pyplot as plt
X = [1,2,3]
Y = [1,2,3]
plt.plot(X, Y)
plt.show()
출력 결과
이렇게 나오면 matplotlib를 설치를 해야 합니다. 그냥 Python만 설치했으면 이 오류가 나올 것입니다. Python을 설치할 때 같이 설치가 안되는게 좀 아쉬운 부분입니다. 저 같은 경우는 많이 사용하는 편이라서, 그냥 Python 설치할 때 같이 되면 좋겠다 생각을 합니다. 그래도 쉽게 설치가 가능하니 다행인 것 같습니다. 아래에 간단하게 matplolib설치 설명이 있습니다. 참고하세요. 진짜 쉽고 빠르게 설치할 수 있습니다. (저는 윈도우 유저라서 맥이나 리눅스는 모르겠습니다. 아마도 비슷하게 커맨드 창에서 인스톨하시면 될 것 같습니다.)
matplolib 설치
가장 쉬운 방법으로는 cmd창을 이용하는 것입니다.
윈도키 + r을 누르면 왼쪽 아래에 실행창이 나오는데 거기다 cmd라고 치고 Enter를 누르면 됩니다.
그 이후에 아래처럼 pip install matplotlib를 입력하면 다운 받아서 알아서 설치를 합니다.
pip 새로운 버전이 있다고 하는데, 일단 저는 무시하고 그래프가 잘 그려지는지 확인해보겠습니다.
아까 코드를 돌리면 아래와 같은 결과가 나옵니다.
이게 중요한 이유는 여러 가지 결과를 쉽게 눈으로 확인할 때 좋기 때문입니다. 예를 들어서 어떤 알고리즘을 돌렸을 때 2넣으니까 2 나오고, 3나오고 이렇게 말로 설명을 하는 것보다 위에 처럼 그림을 보여주면서 이런 결과가 나왔다고 하는게 더 보기도 좋고 이해시키기가 훨씬 쉽습니다. (엑셀로도 가능하겠지만, python은 공짜니까 더 좋다고 생각합니다.)
그래프를 그리는 데 있으면 좋은 예시를 보여주겠습니다.
꼭 plt로 표현할 필요는 없습니다. 아래 from matplotlib import pyplot as plt는 줄여서 부르기 위해서 코딩을 짜는 사람이 정하는 것입니다. 일반적으로 많은 python코드를 보시면 pyplot를 plt로 해서 많이 사용을 하고 있습니다. 그래도 plt를 내가 바꿔서 쓸 수 있다는 것 정도는 알고 넘어가는게 좋은 것 같습니다.
Example 1
X label, Y label
from matplotlib import pyplot as plt
X = [1,2,3]
Y = [1,2,3]
plt.plot(X, Y)
plt.xlabel('X number')
plt.ylabel('Y number')
plt.show()
출력 결과
Example 2
Title, Marker/Color
그래프의 색을 유저가 직접 선택할 수 있습니다.
코드 |
Color |
‘b’ |
파랑 |
‘g’ |
녹색 |
‘r’ |
빨강 |
‘c’ |
옥색 |
‘y’ |
노랑 |
‘m’ |
자홍색 |
‘w’ |
하얀 |
‘k’ |
검정 |
위의 테이블의 값들을 이용해서 그래프를 다양한 색으로 표현이 가능합니다.
from matplotlib import pyplot as plt
X = [1,2,3]
Y = [1,2,3]
plt.plot(X, Y, color='g', marker='x')
plt.xlabel('X number')
plt.ylabel('Y number')
plt.title('Some Numbers')
plt.show()
출력 결과
Example 3
plot 만드는데 필요한 것들 그리고 그래프 이미지 저장
Marker나 Line Style을 바꿔가면서 자기 자신이 원하는 스타일의 그래프를 만들 수도 있습니다.
Marker 종류
Marker 종류 |
코드 |
동그라미 |
O |
다이아몬드 |
D |
점 |
. |
플러스 |
+ |
사각형 |
s |
X |
x |
별 모양 |
* |
위에 테이블에 있는 Marker가 모든 Marker는 아닙니다. 찾아보시면 더 다양한 Marker의 종류가 존재합니다. 필요하시면 구글링해서 확인하시고 사용하시면 됩니다.
Linestyle 종류
Linestyle 종류 |
코드 |
그냥 선 |
- |
점선 |
-- |
점선과점 |
-. |
점 |
: |
LineStyle의 종류는 위의 종류보다 더 많이 존재합니다. 더 다양한 것을 이용하기 위해서는 matplotlib 사이트에 가셔서 보시면 됩니다. 저 같은 경우는 위의 경우로 표현하는 정도만 사용을 해서 다양한 LineStyle을 사용하지는 않았습니다.
from matplotlib import pyplot as plt
X1 = [1,2,3,4]
Y1 = [1,2,3,4]
X2 = [1,2,3,4]
Y2 = [1,4,9,16]
plt.plot(X1, Y1, color='g', marker='x', label='num',linestyle='--')
plt.plot(X2, Y2, color='r', marker='D', label='num2',linestyle='-.')
plt.xlabel('X number')
plt.ylabel('Y number')
plt.title('Some Numbers')
plt.legend()
plt.savefig("some-number.png")
plt.show()
출력 결과
여기서 plt.legend()를 했는데 plt.plot안에 label를 추가 안하면 오류 발생합니다.
Example 4
Bar Chart를 만들기
일반적으로 선 그래프를 많이 만들어서 사용을 하는데, 데이터 분석을 하다 보면 선 그래프보다 Bar Chart가 유용한 경우가 있습니다. 이때,Bar Chart 또한 Python에서 그릴 수가 있습니다.
from matplotlib import pyplot as plt
X = [1,2,3]
Y = [2,3,4]
barchart_example = plt.bar(X,Y, align='center',alpha= 0.9)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('X + 1')
barchart_example[0].set_color('b')
barchart_example[1].set_color('g')
barchart_example[2].set_color('r')
plt.show()
출력 결과
Example 5
그냥 예쁜 그래프 그리기(BarnsleyFern이라는 그림 그리기)
마지막으로 BarnsleyFern이라는 것을 보여 드리겠습니다. 솔직히 BarnsleyFern을 이해하고 만들었다기 보다는 함수의 공식을 알고 있으니 그것을 Python으로 구현해서 그래프로 그린 것 입니다.
from matplotlib import pyplot as plt
import random
def BarnsleyFernFunction(probability,X,Y):
if((probability < 0.85) and (probability >= 0.0)):
X_1 = 0.85 * X + 0.04 * Y
Y_1 = -0.04 * X + 0.85 * Y + 1.6
elif((probability >= 0.85) and (probability < 0.92 )):
X_1 = 0.2 * X - 0.26 * Y
Y_1 = 0.23 * X + 0.22 * Y + 1.6
elif((probability >= 0.92) and (probability < 0.99)):
X_1 = -0.15 * X + 0.28 * Y
Y_1 = 0.26 * X + 0.24 * Y + 0.44
else:
X_1 = 0.0
Y_1 = 0.16*Y
return X_1,Y_1
X = [0.0]
Y = [0.0]
X_1 = 0.0
Y_1 = 0.0
num_sample = 100000
for i in range (0,num_sample):
probability = random.uniform(0, 1)
X_1,Y_1 = BarnsleyFernFunction(probability,X[i],Y[i])
X.append(X_1)
Y.append(Y_1)
plt.plot(X,Y, color='g', marker='o', linestyle = 'None', markersize = 1)
plt.show()
출력 결과
num_sample = 10
점 크기가 좀 크면 안 예뻐서 markersize를 1로 바꾸었다.
num_sample = 100
num_sample = 1000
num_sample = 10000
num_sample = 100000
이렇게 해서 python에서 그래프 혹은 그림 그리기를 설명을 끝냈습니다. 저 같은 경우는 프로젝트를 C혹은 C++로 주로 하다 보니까, 그래프 그릴 때 많은 불편함이 있었습니다. Opencv로 해서 하기도 하고….그러다가 Python이라는 언어를 알게 되었고, 이 Python을 이용해서 그림 혹은 그래프를 그리니까 C혹은 C++에서 변수 값을 하나 하나 확인을 해서 디버깅을 한 것도 python으로 데이터를 옮겨서 그림을 그리니까 단번에 어디가 문제인지 확인이 가능한 경우가 있었습니다. 여기서 제가 하고 싶은 말은 꼭 한 언어로만 모든 것을 하지 말라는 것입니다. 각각의 언어에 장단점이 다 있습니다. 사용되는 곳 또한 다 다릅니다. 그렇다고 해서 한 가지 언어에만 집중하기 보다는 다양한 언어를 사용해서 그림이나 그래프를 그릴때는 Python 변수 값 하나하나 확인할 때는 Visual Studio에서 조사식으로 확인 이런 식으로 다양하게 활용을 하시면 프로젝트 참여할 때 많은 부분에서 편하실 겁니다.
여기까지 해서 간단하게 제가 아는 Python정보를 나열했습니다. 그냥 수업 들은 거 짜집기 및 숙제 혹은 프로젝트, 회사 일 하면서 느꼈던 점들도 중간중간 들어가 있습니다. 그러다 보니, 글이 많이 이상한 것 같습니다. 저도 이번에 정리를 하면서 다시 Python을 공부를 하는 좋은 계기가 되었습니다. 이다음부터는 여러 코딩 수업을 들으면서 한 숙제 및 프로젝트에 대해서 글을 쓰려고 합니다. 백날 이런 컴퓨터 코딩 언어 글 읽는 것보다 주기적으로 코딩을 하면서 배우는 게 훨씬 도움이 많이 됩니다.