let us not love with words or tongue but actions and truth.

IT/파이썬

[그래프] for문으로 산점도 그리기 plt.scatter 활용

sarah0518 2021. 8. 2. 18:19

오늘은 간단한 산점도에 대해서 정리해보려고 합니다.

 

산점도를 그릴 때 점마다 다른 색으로 표현해야할 때가 있죠.

 

그럴 때 유용한 방법입니다.

 

우선 2가지 방법으로 소개 드릴 건데요.

 

 

 

첫번째!

표현하려고 하는 점의 색깔이 적을 경우.

 

 

두번째! 

표현하려고 하는 점의 색깔이 많은 경우(for문활용).

 

이렇게 정리를 해보려고 해요.

 

 

우선 첫번째의 경우의 코드 먼저 소개 해 드릴게요.

 

그래프 그리기의 시작은 언제나 그렇듯 matplotlib을 불러옵니다.

1
from matplotlib import pyplot as plt
cs

 

그 다음 아래 코드가 산점도를 그려주는 값인데요.

 

우선 이번 예제는 분류의 결과를 그래프로 나타내보는 거에요.

  • TP(정답을 정답으로 분류)
  • TN(오답을 오답으로 분류)
  • FN(정답을 오답으로 분류)
  • FP(오답을 정답으로 분류)

분류 결과는 위에 처럼 4가지가 있겠지요.

 

그 4가지의 경우를 모두 plt.scatter함수에 넣어주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
plt.figure(figsize=(10,8))
types_tf=df['result'].unique()
# unique한 값은 TP, FN, TN, FP임
 
plt.scatter(x=df[df['result']=='TP']['colA'], y=df[df['result']=='TP']['colB'], alpha=0.7)
plt.scatter(x=df[df['result']=='FN']['colA'], y=df[df['result']=='FN']['colB'], alpha=0.7)
plt.scatter(x=df[df['result']=='TN']['colA'], y=df[df['result']=='TN']['colB'], alpha=0.7)
plt.scatter(x=df[df['result']=='FP']['colA'], y=df[df['result']=='FP']['colB'], alpha=0.7)
 
plt.legend(labels=types_tf)
 
 
 
cs

 

이 방법은 위의 예제와 같이 분류해야할 케이스(색으로 표현해야할 경우의수)가

4개처럼 작은 수 일 때 쉽게 사용할 수있어요.

 

 

하지만, 실제는 더 많은 케이스로 색을 나타내야할 경우도 있겠죠.

 

 

그럴 때는 두번 째 방법은 for문을 활용한 방법을 사용하면 됩니다.

 

1
2
3
4
5
plt.figure(figsize=(10,8))
types_tf=df['result'].unique()
for i in range(len(types_tf)):
    plt.scatter(x=df[df['result']==types_tf[i]]['colA'], y=df[df['result']==types_tf[i]]['colB'], alpha=0.7)
plt.legend(labels=types_tf)
cs

 

훨씬 더 코드가 짧아진 걸 볼 수 있죠.

 

for문을 통해 TP, TN, FP, FN에 대해서 자동으로 돌아가며 색을 표현해주는 거지요.

 

 

두 코드의 결과는 아래와 같습니다.

 

 

특히, 산점도는 한 경우의 색에 해당하는 산점도를 미리 찍어주고

(여기서는 TP에 해당하는 파란색 점을 미리 찍어주고)

 

그 다음 FN, TN, FP순서로 돌아가면서 그 위에 점을 덮어줍니다.

 

 

따라서 만약, 순서를 TP ,TN , FP ,FN 으로 바꿔준다면 

(위의 순서에서 2번 째였던 FN이 가장 끝으로)

 

1
2
3
4
5
6
plt.figure(figsize=(10,8))
types_tf='TP' , 'TN','FP''FN']
# 기존에는 [TP, FN, TN, FP]
for i in range(len(types_tf)):
    plt.scatter(x=df_wP[df_wP['result']==types_tf[i]]['DeltaOCV'], y=df_wP[df_wP['result']==types_tf[i]]['PVT_OCV3'], alpha=0.7)
plt.legend(labels=types_tf)
cs

 

그래프는 아래와 같이 나올 거에요.

순서를 변경해줌으로써 FN이 빨강색 점으로 바뀐 것을 알 수 있습니다!

 

 

산점도의 색깔 표현은 여기서 마무리 할게요!

'IT > 파이썬' 카테고리의 다른 글

[그래프] subplot 활용하기  (0) 2021.08.12
if문과 apply함수로 파생변수 만들기  (0) 2021.08.04
Bayesian optimization  (0) 2021.06.29
[for loop 활용] 최적화된 feature set 찾기  (0) 2021.06.25
차원축소 tsne, pca와 비교  (0) 2021.04.25