그래프는 생각보다 사용할 일이 다분한 것 같다. 필자가 진행하고 있는 프로젝트에도 필요하여 사용법을 찾아 보았다. 결과를 실시간으로 그려보고 싶었지만 스레딩이 필요한지 안되는 관계로 출력된 파일에서 필요한 부분만 잘라서 그래프로 그려보고자 하였다.


설치(우분투)

1
2
sudo apt-get install python-matplotlib
sudo apt-get install python3-matplotlib

자신에 버전에 맞는 파이썬으로 위 명령어를 통해서 설치해 주면 된다. 그리고 간단한 그래프를 그려보자


기본적인 사용

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

x = [1,2,3,4,5]
y = [1,2,3,4,5]

plt.plot(x,y)
plt.show()

위 선언된 두 리스트가 각각 x축과 y축이 된다. 리스트에 정보를 계속해서 누적하면 원하는 그래프를 그릴 수 있다.


응용

필자가 원하는 것은 유전 알고리즘의 각 세대의 적합도가 어떻게 변화하고 있는 것인지에 대한 그래프다. 물론 아직 알고리즘이 완성된 상태가 아니라서 그래프의 모양은 고전적인 유전 알고리즘의 그래프의 모양과 매우 다르다. 출력된 구조는 아래와 같다.

1
Generation : 1 - best_genome = [80, [9.5389, 8.8227, 9.1025, 9.9596], [0.8428, 0.2431, 0.2528, 0.8441, 0.1945, 0.3988]], avg_fitness = 19.5

다음은 소스코드다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt

x = []
y = []

read_file = open("result.txt", 'r')
read_list = read_file.readlines()

generation = 1
full_generation = len(read_list)

for line in read_list:
    print("Proceccing..." + str((generation/full_generation)*100) + "%")
    temp = line.split("avg_fitness =")
    avg_fitness = float(temp[1])

    x += [generation,]
    y += [avg_fitness,]
    generation += 1

plt.plot(x,y)
plt.show()

어차피 x축은 각 세대를 의미하므로 1부터 누적하고 적합도만 split를 이용하여 필요한 값을 추출하였다. 그래서 아래는 그 결과다.

결과

WRITTEN BY

배진오

하고싶은 건 다 하면서 사는게 목표
im@baejino.com

comments powered by Disqus