Matplotlib 산점도 (Scatter Plot) 실습에 오신 것을 환영합니다! 산점도는 데이터 시각화의 기본적인 도구로, 일반적으로 데이터 세트의 두 변수에 대한 값을 표시하는 데 사용됩니다. 변수 간의 관계나 상관관계를 관찰하는 데 탁월합니다.
이 실습에서는 Python 의 Matplotlib 라이브러리를 사용하여 산점도를 생성합니다. 다음 내용을 배우게 됩니다:
NumPy 를 사용하여 데이터 배열 생성하기.
plt.scatter()로 기본적인 산점도 생성하기.
마커 크기와 색상을 포함한 플롯의 모양 사용자 정의하기.
가독성을 높이기 위해 그리드 추가하기.
모든 작업은 WebIDE 환경에서 진행됩니다. 파일에 Python 코드를 작성하고 터미널에서 실행하게 됩니다. 이 환경은 비대화형이므로, plt.show()로 표시하는 대신 plt.savefig()를 사용하여 플롯을 이미지 파일로 저장하게 됩니다.
시작해 봅시다!
x 및 y 데이터 배열 생성
이 단계에서는 산점도에 사용할 데이터를 생성합니다. 산점도는 최소한 동일한 길이의 두 데이터 배열이 필요합니다. 하나는 x 축 좌표용이고 다른 하나는 y 축 좌표용입니다. Python 에서 수치 연산의 표준인 NumPy 라이브러리를 사용할 것입니다.
먼저 WebIDE 왼쪽 패널의 파일 탐색기에서 main.py 파일을 엽니다. 이 파일에 이 실습의 모든 코드를 작성하게 됩니다.
이제 NumPy를 가져오고 두 개의 간단한 데이터 배열을 생성하기 위해 main.py에 다음 코드를 추가합니다.
import numpy as np
## Data for plotting
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
코드를 살펴보겠습니다.
import numpy as np: 이 줄은 NumPy 라이브러리를 가져오고 관례적인 별칭 np를 부여합니다.
x = np.array([...]): 이 줄은 수평 축에 대한 데이터 포인트를 포함하는 x라는 NumPy 배열을 생성합니다.
y = np.array([...]): 이 줄은 수직 축에 대한 데이터 포인트를 포함하는 y라는 NumPy 배열을 생성합니다.
이제 main.py 파일에 이 코드가 포함되어야 합니다. 다음 단계에서는 이 데이터를 사용하여 첫 번째 플롯을 생성합니다.
plt.scatter(x, y) 를 사용하여 산점도 플로팅
이 단계에서는 생성한 데이터를 사용하여 기본적인 산점도를 생성합니다. 플롯 생성을 위한 간단한 인터페이스를 제공하는 matplotlib.pyplot 모듈을 사용할 것입니다.
먼저 matplotlib.pyplot을 가져와야 합니다. 그런 다음 plt.scatter() 함수를 사용하여 플롯을 생성할 수 있습니다. 마지막으로 플롯을 파일로 저장해야 합니다. 소개에서 언급했듯이 이 환경에서는 plt.show()를 사용하여 플롯을 직접 표시할 수 없습니다. 대신 plt.savefig()를 사용하여 이미지로 저장할 것입니다.
main.py 파일을 다음 코드로 업데이트하세요. 기존 코드 아래에 새 줄을 추가합니다.
import numpy as np
import matplotlib.pyplot as plt
## Data for plotting
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
## Create scatter plot
plt.scatter(x, y)
## Save the plot to a file
plt.savefig('/home/labex/project/scatter_plot.png')
print("Scatter plot saved to scatter_plot.png")
코드 설명:
import matplotlib.pyplot as plt: 플로팅 모듈을 가져오고 표준 별칭 plt를 부여합니다.
plt.scatter(x, y): 이것이 핵심 함수입니다. x와 y 배열을 받아 각 (x, y) 값 쌍을 점으로 플로팅합니다.
plt.savefig('/home/labex/project/scatter_plot.png'): 이 함수는 현재 그림을 ~/project 디렉터리의 scatter_plot.png라는 파일로 저장합니다.
이제 WebIDE 하단의 터미널에서 스크립트를 실행합니다.
python3 main.py
터미널에서 다음과 같은 출력을 볼 수 있습니다.
Scatter plot saved to scatter_plot.png
왼쪽 파일 탐색기에 scatter_plot.png라는 새 파일이 나타납니다. 이 파일을 두 번 클릭하여 첫 번째 산점도를 확인하세요!
s 매개변수를 사용하여 마커 크기 사용자 정의
이 단계에서는 산점도에서 마커 (점) 의 크기를 사용자 정의하는 방법을 배웁니다. plt.scatter() 함수에는 마커 크기를 제어하는 선택적 매개변수 s가 있습니다.
단일 숫자를 제공하여 모든 마커의 크기를 동일하게 만들거나, 숫자 배열 ( x 및 y 데이터와 길이가 같음) 을 제공하여 각 마커에 대한 고유한 크기를 지정할 수 있습니다. 플롯을 더 흥미롭게 만들기 위해 후자를 사용해 보겠습니다.
main.py 파일을 수정합니다. sizes 배열을 생성하고 plt.scatter() 함수의 s 매개변수에 전달할 것입니다.
import numpy as np
import matplotlib.pyplot as plt
## Data for plotting
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90, 10, 300, 600, 800, 75])
## Create scatter plot with custom sizes
plt.scatter(x, y, s=sizes)
## Save the plot to a file
plt.savefig('/home/labex/project/scatter_plot_sizes.png')
print("Scatter plot with custom sizes saved to scatter_plot_sizes.png")
업데이트된 코드에서는 sizes 배열을 추가하고 plt.scatter() 호출을 plt.scatter(x, y, s=sizes)로 수정했습니다. 이제 각 점은 sizes 배열의 해당 크기로 플로팅됩니다.
변경 사항을 보려면 스크립트를 다시 실행합니다.
python3 main.py
스크립트가 완료된 후 scatter_plot_sizes.png를 다시 엽니다. 이제 마커의 크기가 달라져 플롯이 시각적으로 더 유익해진 것을 알 수 있습니다.
c 매개변수를 사용하여 마커 색상 변경
이 단계에서는 마커의 색상을 사용자 정의하는 방법을 배웁니다. 크기와 마찬가지로 plt.scatter() 함수의 c 매개변수를 사용하여 색상을 제어할 수 있습니다.
단일 색상 이름 (예: 'red') 을 전달하여 모든 마커의 색상을 동일하게 만들거나, 색상 배열을 전달하여 각 마커에 특정 색상을 지정할 수 있습니다. 각 점에 고유한 색상을 할당해 보겠습니다.
colors 배열을 포함하고 c 매개변수에 전달하도록 main.py 파일을 업데이트하세요.
import numpy as np
import matplotlib.pyplot as plt
## Data for plotting
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90, 10, 300, 600, 800, 75])
colors = np.array(["red", "green", "blue", "yellow", "pink", "black", "orange", "purple", "beige", "brown", "gray", "cyan", "magenta"])
## Create scatter plot with custom sizes and colors
plt.scatter(x, y, s=sizes, c=colors)
## Save the plot to a file
plt.savefig('/home/labex/project/scatter_plot_colors.png')
print("Scatter plot with custom colors saved to scatter_plot_colors.png")
이제 색상 이름이 포함된 colors 배열을 추가하고 함수 호출을 plt.scatter(x, y, s=sizes, c=colors)로 업데이트했습니다.
터미널에서 스크립트를 실행합니다.
python3 main.py
scatter_plot_colors.png를 다시 한번 엽니다. 배열에 정의된 대로 각 점이 다른 크기와 색상을 갖는 다채로운 산점도를 볼 수 있습니다.
plt.grid() 를 사용하여 그리드 추가
마지막 단계에서는 산점도에 그리드를 추가합니다. 그리드를 사용하면 축에서 데이터 포인트의 값을 더 쉽게 읽을 수 있습니다.
Matplotlib 에서 그리드를 추가하는 것은 매우 간단합니다. 플롯을 저장하기 전에 plt.grid() 함수를 호출하기만 하면 됩니다. 기본적으로 plt.grid(True)는 그리드를 표시합니다.
스크립트에 이 기능을 추가해 보겠습니다. plt.grid() 호출을 포함하도록 main.py를 수정합니다.
import numpy as np
import matplotlib.pyplot as plt
## Data for plotting
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90, 10, 300, 600, 800, 75])
colors = np.array(["red", "green", "blue", "yellow", "pink", "black", "orange", "purple", "beige", "brown", "gray", "cyan", "magenta"])
## Create scatter plot
plt.scatter(x, y, s=sizes, c=colors)
## Add a grid
plt.grid(True)
## Save the plot to a file
plt.savefig('/home/labex/project/scatter_plot_grid.png')
print("Scatter plot with grid saved to scatter_plot_grid.png")
plt.savefig() 바로 앞에 plt.grid(True)를 추가했습니다. 이는 Matplotlib 에 플롯에 그리드를 그리도록 지시합니다.
스크립트의 최종 버전을 실행합니다.
python3 main.py
이제 scatter_plot_grid.png 이미지를 확인합니다. 플롯의 배경에 그리드가 추가되어 사용자 정의 산점도가 완성되었습니다.
요약
실습을 완료하신 것을 축하드립니다! Matplotlib 을 사용하여 산점도를 생성하고 사용자 정의하는 기본 사항을 성공적으로 익혔습니다.
이번 실습에서는 다음을 연습했습니다.
NumPy 를 사용하여 플로팅 데이터를 생성했습니다.
plt.scatter()로 기본 산점도를 생성했습니다.
s 매개변수를 사용하여 마커 크기를 사용자 정의했습니다.
c 매개변수를 사용하여 마커 색상을 변경했습니다.
plt.grid()로 플롯에 그리드를 추가했습니다.
plt.savefig()로 플롯을 파일에 저장했습니다.
이것들은 Python 에서 데이터 시각화를 위한 필수적인 기술입니다. 이제 데이터의 관계를 탐색하기 위해 유익하고 시각적으로 매력적인 산점도를 만들 수 있습니다. 학습을 계속하려면 제목과 레이블 추가, 다른 마커 스타일 사용 또는 고급 시각화를 위한 컬러맵 적용 등을 탐색해 볼 수 있습니다.