소개..
산점도는 데이터를 2차원으로 표현하여 두 변수 사이에 관계가 있는지 여부를 확인할 때 매우 유용합니다. 산점도는 데이터가 X 및 Y 값이 있는 점으로 표시되는 차트입니다.
그것을 하는 방법..
1. 다음 명령어로 matplotlib를 설치합니다.
pip install matplotlib
2. matplotlib 가져오기
import matplotlib.pyplot as plt tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0))
3. 다음 단계는 모든 배열 형식으로 데이터를 준비하는 것입니다. 데이터베이스나 스프레드시트에서 데이터를 읽고 아래 형식으로 데이터를 포맷할 수도 있습니다.
titles = [title for player, title in tennis_stats] players = [player for player, title in tennis_stats]
4. matplotlib의 다른 방법과 마찬가지로 .scatter의 매개변수에는 X 및 Y 값의 배열이 필요합니다.
*참고 -* X 및 Y 값은 모두 같은 크기여야 하며 데이터는 기본적으로 부동 소수점으로 변환됩니다.
plt.scatter(titles, players)
<matplotlib.collections.PathCollection at 0x28df3684ac0>
5. 오, x축에 표시된 내 GrandSlam 타이틀은 부동 소수점입니다. 정수로 변환하고 아래 함수에 x축과 y축 제목도 추가하겠습니다. 축 포맷터는 .set_major_formatter로 덮어씁니다.
from matplotlib.ticker import FuncFormatter def format_titles(title, pos): return '{}'.format(int(title)) plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles)) plt.xlabel('Grandslam Titles') plt.ylabel('Tennis Player') plt.scatter(titles, players)
6. 산점도를 단순한 2D 차트로 생각하지 마십시오. 산점도는 세 번째(영역)와 네 번째 차원(색상)도 추가할 수 있습니다. 아래에서 내가 무엇을 할 것인지 조금 설명하겠습니다.
먼저 선택한 색상을 정의한 다음 무작위로 색상을 선택하고 둘러보기 값을 지정하는 과정을 반복합니다.
알파 값은 각 점을 반투명하게 만들어 겹치는 부분을 볼 수 있도록 합니다. 이 값이 높을수록 포인트가 덜 투명해집니다.
import random # define your own color scale. random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F'] # set the number of colors similar to our data values color = [random.choice(random_colors) for _ in range(len(titles))] plt.scatter(titles, players, c=color, alpha=0.5)
<matplotlib.collections.PathCollection at 0x28df2242d00>
7. 이제 표현의 크기/영역을 조금 더 크게 만들어 보겠습니다.
import random # define your own color scale. random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F'] # set the number of colors similar to our data values color = [random.choice(random_colors) for _ in range(len(titles))] # set the size size = [(50 * random.random()) ** 2 for _ in range(len(titles))] plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles)) plt.xlabel('Grandslam Titles') plt.ylabel('Tennis Player') plt.scatter(titles, players, c=color, s=size, alpha=0.1)
<matplotlib.collections.PathCollection at 0x28df22e2430>
그래프의 궁극적인 목표는 데이터를 이해하기 쉽게 만드는 것임을 기억하십시오.
저는 산점도를 사용하여 수행할 수 있는 작업의 기본 사항을 보여주었습니다. 예를 들어 크기에 따라 색상을 지정하여 같은 크기의 모든 점을 같은 색상으로 만들면 데이터를 구별하는 데 도움이 될 수 있습니다.
자세히 알아보기 - https://matplotlib.org/.
마지막으로 모든 것을 통합합니다.
예시
# imports import matplotlib.pyplot as plt import random # preparing data.. tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0)) titles = [title for player, title in tennis_stats] players = [player for player, title in tennis_stats] # custom function from matplotlib.ticker import FuncFormatter def format_titles(title, pos): return '{}'.format(int(title)) # define your own color scale. random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F'] # set the number of colors similar to our data values color = [random.choice(random_colors) for _ in range(len(titles))] # set the size size = [(50 * random.random()) ** 2 for _ in range(len(titles))] plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles)) plt.xlabel('Grandslam Titles') plt.ylabel('Tennis Player') plt.scatter(titles, players, c=color, s=size, alpha=0.1)
<matplotlib.collections.PathCollection at 0x2aa7676b670>