Python matplotlib : set_data (그래프의 좌표값 변경하기, 그래프 좌표 변경, 그래프 x값, y값 변경)
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를 통해 새로 설정한 좌표가 제대로 나오는 것을 확인할 수 있죠.