Matplotlib 분산
산점도 만들기
Pyplot에서는 scatter()
함수를 사용하여 산점도를 그릴 수 있습니다.
이 scatter()
함수는 각 관찰에 대해 하나의 점을 표시합니다. 길이가 같은 두 개의 배열이 필요합니다. 하나는 x축의 값을 위한 것이고 다른 하나는 y축의 값을 위한 것입니다.
예시
간단한 산점도:
import matplotlib.pyplot as plt
import numpy as np
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])
plt.scatter(x, y)
plt.show()
결과:
위의 예에서 관찰한 것은 13대의 차량이 지나가는 결과입니다.
X축은 자동차의 수명을 나타냅니다.
Y축은 자동차가 지나갈 때의 속도를 나타냅니다.
관측치 사이에 관계가 있습니까?
새 차일수록 더 빨리 달리는 것 같지만, 우리가 등록한 차만 13대에 불과한 우연의 일치일 수도 있습니다.
플롯 비교
위의 예에서 속도와 나이 사이에 관계가 있는 것처럼 보이지만 다른 날의 관찰도 플로팅하면 어떻게 될까요? 산점도가 우리에게 다른 것을 말해줄까요?
예시
같은 그림에 두 개의 플롯을 그립니다.
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
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])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
결과:
참고: 두 개의 플롯은 기본적으로 파란색과 주황색의 두 가지 다른 색상으로 표시됩니다. 이 장의 뒷부분에서 색상을 변경하는 방법을 배우게 될 것입니다.
두 플롯을 비교함으로써 두 가지 모두 동일한 결론을 제공한다고 말하는 것이 안전하다고 생각합니다. 새 차는 더 빨리 운전합니다.
그림 물감
color
또는 c
인수 를 사용하여 각 산점도에 대해 고유한 색상을 설정할 수 있습니다
.
예시
마커의 고유한 색상을 설정합니다.
import matplotlib.pyplot as plt
import numpy as np
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])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
결과:
각 점에 색상 지정
c
색상 배열을 인수 값으로 사용하여 각 점에 대해 특정 색상을 설정할 수도 있습니다
.
참고: 이에 대한 인수는 사용할 수 없으며 인수만 사용할 수 있습니다 .color
c
예시
마커의 고유한 색상을 설정합니다.
import matplotlib.pyplot as plt
import numpy as np
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])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
결과:
컬러맵
Matplotlib 모듈에는 사용 가능한 여러 컬러맵이 있습니다.
컬러맵은 각 색상의 값이 0에서 100 사이인 색상 목록과 같습니다.
다음은 컬러맵의 예입니다.
이 컬러맵을 '비리디스(viridis)'라고 하며 보다시피 보라색인 0부터 노란색인 100까지 다양합니다.
ColorMap을 사용하는 방법
컬러맵 값과 함께 키워드 인수로 컬러맵을 지정할 수 있습니다
cmap
. 이 경우 'viridis'
Matplotlib에서 사용할 수 있는 내장 컬러맵 중 하나입니다.
또한 산점도의 각 점에 대해 하나의 값(0에서 100까지)이 있는 배열을 만들어야 합니다.
예시
색 배열을 만들고 산점도에 컬러맵을 지정합니다.
import matplotlib.pyplot as plt
import numpy as np
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])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
결과:
plt.colorbar()
다음 명령문 을 포함하여 도면에 컬러맵을 포함할 수 있습니다 .
예시
실제 컬러맵 포함:
import matplotlib.pyplot as plt
import numpy as np
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])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
결과:
사용 가능한 컬러맵
내장된 컬러맵 중 하나를 선택할 수 있습니다.
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
크기
s
인수 로 점의 크기를 변경할 수 있습니다
.
색상과 마찬가지로 크기에 대한 배열의 길이가 x축 및 y축에 대한 배열과 동일한지 확인합니다.
예시
마커에 대한 고유한 크기 설정:
import matplotlib.pyplot as plt
import numpy as np
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])
plt.scatter(x,
y, s=sizes)
plt.show()
결과:
알파
alpha
인수 로 점의 투명도를 조정할 수 있습니다
.
색상과 마찬가지로 크기에 대한 배열의 길이가 x축 및 y축에 대한 배열과 동일한지 확인합니다.
예시
마커에 대한 고유한 크기 설정:
import matplotlib.pyplot as plt
import numpy as np
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])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
결과:
색상 크기와 알파 결합
점에서 크기가 다른 컬러맵을 결합할 수 있습니다. 점이 투명한 경우 가장 잘 시각화됩니다.
예시
x-포인트, y-포인트, 색상 및 크기에 대해 100개의 값으로 임의의 배열을 생성합니다.
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
결과: