달나라 노트

Python matplotlib : set_data (그래프의 좌표값 변경하기, 그래프 좌표 변경, 그래프 x값, y값 변경) 본문

Python/Python matplotlib

Python matplotlib : set_data (그래프의 좌표값 변경하기, 그래프 좌표 변경, 그래프 x값, y값 변경)

CosmosProject 2022. 1. 16. 02:44
728x90
반응형

 

 

 

matplotlib에서 set_data method는 기존 그래프에 존재하는 좌표값을 아예 지우고, 새로운 x좌표/y좌표값들로 다시 설정해주는 기능을 합니다.

 

 

import matplotlib.pyplot as plt

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]

line = plt.plot(list_x, list_y,
                color='skyblue',
                marker='o', markerfacecolor='blue',
                markersize=6)[0]

list_x = [1, 3, 4, 5]
list_y = [6, 5, 4, 3]
line.set_data(list_x, list_y)

plt.show()

 

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]

위 코드에서 첫 번째 plot은 위처럼 x값이 1, 2, 3, 4, 5이고 y값은 2, 3, 4, 5, 6인 좌표를 토대로 그래프를 그립니다.

 

list_x = [1, 3, 4, 5]
list_y = [6, 5, 4, 3]

그러나 set_data를 이용해서 x값이 1, 3, 4, 5이고, y값이 6, 5, 4, 3인 좌표들로 그래프를 update하였고, 최종적으로 기존 그래프는 사라지고 set_data method가 update한 값만 나오게 됩니다.

 

이렇게 set_data는 그래프의 좌표값을 새로운 값으로 덮어씌워주는 기능을 합니다.

 

 

 

 

line = plt.plot(list_x, list_y,
                color='skyblue',
                marker='o', markerfacecolor='blue',
                markersize=6)[0]

line.set_data(list_x, list_y)

그리고 set_data와 관련된 핵심적인 부분만 보면 위와 같습니다.

여기서 주의할 것은 set_data는 plot.plot method가 return하는 line 2D 객체에 적용할 수 있는 속성입니다.

따라서 plt.set_data 이런식으로 사용하면 안되기 때문에 plot method가 return하는 line 2D 객체를 line이라는 변수에 할당한 후 line에 할당된 객체에서 set_data를 사용한 것입니다.

 

plot method가 return하는 line 2D 객체에 관련해서는 아래 링크의 Step 2. 부분을 참고하면 됩니다.

https://cosmosproject.tistory.com/431

 

 

 

 

 

 

 

 

 

 

 

 

set_data 사용 중 발생하는 한 가지 특성을 더 살펴봅시다.

 

보통 matplotlib는 기본적으로 x축과 y축의 범위를 그래프가 처음 그려질 때 존재하는 좌표들을 기준으로 적당하게 설정해줍니다.

그러나 이것은 첫 번째 그래프가 그려질 때를 기준으로 합니다.

 

이게 무슨 소린지 아래 코드를 봅시다.

import matplotlib.pyplot as plt

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]

line = plt.plot(list_x, list_y,
                color='skyblue',
                marker='o', markerfacecolor='blue',
                markersize=6)[0]

list_x = [10, 11, 12, 13]
list_y = [11, 12, 13, 14]
line.set_data(list_x, list_y)

plt.show()

분명히 set_data를 이용해서 새로운 좌표값을 줬는데 결과 그래프에는 아무것도 보이지 않습니다.

 

그 이유는 x축과 y축을 보면 알 수 있습니다.

지금 위 그래프에서는 x축의 최대값이 5이고 y축의 최대값은 6입니다.

이렇게 설정된 이유는 plot method가 처음 그래프를 그릴 때 전달된 좌표값이 다음과 같았기 때문이죠.

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]

 

따라서 plot method는 적당하게 x축의 최대값을 5, 최소값을 1로 잡고

y축의 최대값은 6, y축의 최소값은 2로 잡은겁니다.

 

그러나 set_data로 update된 새로운 좌표는 x값이 10, 11, 12, 13이니 위 그래프에 나타난 최대값이 5인 좌표평면에선 새로 업데이트된 좌표를 나타낼 수 없는 것이죠.

 

이럴땐 xlim, ylim method를 이용해서 다음 코드처럼 x축과 y축의 최대값/최소값을 직접 지정해주면 됩니다.

import matplotlib.pyplot as plt

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]

line = plt.plot(list_x, list_y,
                color='skyblue',
                marker='o', markerfacecolor='blue',
                markersize=6)[0]

plt.xlim(0, 17)
plt.ylim(0, 16)

list_x = [10, 11, 12, 13]
list_y = [11, 12, 13, 14]
line.set_data(list_x, list_y)

plt.show()

결과 이미지를 보면

x축의 최소값은 0, x축의 최대값은 17로 잘 설정되었고 (17이라는 숫자가 보이지 않지만 x축의 끝 부분이 17을 의미합니다.)

y축의 최소값은 0, y축의 최대값은 16으로 잘 설정된 것을 볼 수 있습니다.

 

그래서 그래프도 set_data를 통해 새로 설정한 좌표가 제대로 나오는 것을 확인할 수 있죠.

 

 

 

 

 

 

728x90
반응형
Comments