pbj0812의 코딩 일기

[PYTHON] 피보나치 수열 시각화 본문

ComputerLanguage_Program/PYTHON

[PYTHON] 피보나치 수열 시각화

pbj0812 2022. 11. 13. 23:45

0. 목표

 - 피보나치 수열 시각화

1. 구상하기

2. 실습

 1) library 호출

import matplotlib.pyplot as plt
import math

 2) 초기값 세팅

# 초기값
data = [1, 1, 2]
n = 15

 3) 피보나치 수열 구현

# 피보나치 수열 구현
for i in range(n-3):
    data.append(data[-1] + data[-2])

 4) 시각화를 위한 부호 리스트 만들기

# 부호
x_sign = [-1, -1, 1, 1] * math.ceil(n / 4)
y_sign = [1] + x_sign

 5) 원점 만들기

# 시작점 구하기
x1 = [1]
y1 = [0]

for i in range(n):
    x1.append(x1[-1] + data[i] * x_sign[i])
    y1.append(y1[-1] + data[i] * y_sign[i])

 6) 시각화

# 시각화
fig, ax = plt.subplots(1, 1, figsize = [15, 15])

for i in range(n - 1):
    # 선분
    ax.plot([x1[i], x1[i + 1]], [y1[i], y1[i + 1]], color = 'r')
    # 사각형
    ax.plot([x1[i], x1[i] + (data[i] * x_sign[i])], [y1[i], y1[i]], color = 'k') # 원점에서 가로축
    ax.plot([x1[i], x1[i] + (data[i] * x_sign[i])], [y1[i] + (data[i] * y_sign[i]), y1[i] + (data[i] * y_sign[i])], color = 'k') # 원점 아닌 가로축
    ax.plot([x1[i], x1[i]], [y1[i], y1[i] + (data[i] * y_sign[i])], color = 'k') # 원점에서 세로축
    ax.plot([x1[i] + (data[i] * x_sign[i]), x1[i] + (data[i] * x_sign[i])], [y1[i], y1[i] + (data[i] * y_sign[i])], color = 'k') # 원점에서 세로축
    
ax.axis('square'); # 정사각형
ax.axis('off') # 숫자 지우기
ax.set_ylim([min(y1[1:n-1]), max(y1[1:n-1])]) # y축 맞추기

3. 결과

4. 참고

 - python 올림 내림 반올림 함수, ceil(), floor(), round() 정리

Comments