Semiconductor, Embedded/2. ROS

ROS2 (6) - Class, 상속을 이용한 그래프 그리기 (pyplot, numpy)

잇(IT) 2024. 9. 30. 14:35

Jupyter Notebook을 이용한 ROS2

 

1. 기본적인 pyplot, numpy를 사용하여 그래프 그리기

pip3 install matplotlib

데이터 시각화를 위한 라이브러리인 matplotlib을 사용하기 위해 설치해준다.

 

데이터 시각화를 위한 pyplot과, 수학적 수치 계산을 위한 numpy를 사용하기 위해 import 해준다.

 

arange 함수를 사용하여 0~6까지 0.01 단위로 숫자의 배열을 생성한다.

 

위에서 생성한 배열을 pi와 sin 함수를 이용하여 계산한다.

y.shape의 결과로 600개의 요소를 가진 1차원 배열을 나타낸다.

 

plt에 있는 figure, plot, grid, show 함수를 이용하여 위와 같이 sin 함수를 시각적 그래프로 그려낸다.

 

figure() : 그림의 크기 설정

plot() : 선 그래프 그리기

grid() : 그래프에 그리드 추가

show() : 모든 플롯을 화면에 표시


2. 함수를 이용한 그래프 그리기

 

sin 그래프를 그리기 위한 함수를 생성한다.

(A : 진폭, sin 곡선의 최대값 / f : 주파수, 곡선의 반복 빈도 / b : 결과를 조정하는 값)

매개변수로 t, 1, 1, 1을 넣게 되면 기본에 봤던 그래프와 동일한 그래프를 그린다.

 

매개변수의 값을 변경하게 되면 위와 같이 그래프 모양이 변경하는 것을 확인할 수 있다.


3. Class를 이용한 그래프 그리기

init 생성자를 통해 Class 생성 시 파라미터를 받아 기본값을 설정한다.

 

받아온 기본값을 기반으로 범위 계산을 하고, 함수를 통해 그래프를 생성한 과정과 동일하게 draw_sin 함수를 통해 그래프 수치 설정 및 그래프를 보여주는 코드가 작성된 함수를 작성한다.

 

DrawSin(1,1,0,3)과 같이 매개변수를 넘겨줌과 동시에 생성자를 통해 기본 값이 설정되고, calc_sin 함수를 통해 범위가 지정된다.

 

위의 코드와 같이 중간에 값을 변경할 경우 변경한 값이 적용되어 함수가 실행된다.


4. Class 상속을 이용한 그래프 그리기

새롭게 생성한 DrawSinusoidal 클래스에 DrawSin 함수를 상속할 수 있다.

 

DrawSinusoidal 클래스의 경우 부모 클래스인 DrawSin 클래스의 함수 및 변수를 전부 사용할 수 있다.

 

1,1,0,3의 값이 상속 받은 DrawSin 생성자 매개변수로 상속받은 변수들의 값으로 입력되고, 자식 함수에 해당 변수들을 대입켜 함수를 실행하게 된다.

 

마찬가지로 값이 입력된 후 draw_cos 함수가 실행되어 위와 같이 그래프를 그리게 된다.


5. 오버라이딩을 통한 그래프 그리기

오버라이딩 특성을 이용하여 DrawSin 클래스의 함수 draw_sin을 오버라이딩한 코드에 해당한다.

title, ylabel, xlabel 함수를 추가한 오버라이딩 함수가 입력되었고, DrawSinusoidal2 클래스를 호출하여 draw_sin 함수를 호출하게 되면 위의 오버라이딩된 함수가 호출된다.

 

마찬가지로 매개변수를 통해 변수에 값을 설정하고, draw_sin() 함수의 경우 위에서 말한바와 같이 오버라이딩된 함수가 실행된다.


6. Super()를 사용한 그래프 그리기

DrawSinusoidal3 클래스에 매개변수를 포함시켜 호출하게 되면 __init__ 함수를 호출하게 된다. 전달 받은 5개의 매개변수가 super()에 의해 부모 클래스의 __init__을 호출하게 되고, DrawSin의 __init__을 호출하여 4개의 매개변수를 전달하여 값을 초기화 시킨다.

부모 클래스의 __init__의 경우 ts 매개변수가 없기 때문에 별도로 값을 초기화 시켜준다.

그 외 함수 호출은 오버라이딩 및 상속을 사용한 것이다.

 

위에서 설명한 것과 같이 클래스에 매개변수를 전달하게 되면 부모 클래스의 함수를 호출하게 되고, 새롭게 오버라이딩한 값이 그래프로 보여지게 된다.

 

 

 

728x90