Search
Duplicate
🎨

Figure에 어떤 색을 써야 할까?

색깔은 그림에서 가장 먼저 인식되는 요소이므로, 색깔을 잘 설정해야 figure가 전하고자 하는 메시지가 잘못 전달되는 일이 없고, 직관적으로 이해되는 좋은 figure를 만들 수 있다.

원칙

1.
논문 전체에 걸쳐서 일관된 원칙으로 색깔을 설정한다.
예) 동일한 카테고리에 대해서 동일한 색
2.
직관적인 색으로 설정하자.
예) 강조하고 싶은 item에는 채도가 높은 색, 나머지에는 채도가 낮은 색
예) 높은 값에는 붉은 계열, 낮은 값에는 푸른색 계열
예) 분야에서 널리 사용되고 있는 color mapping이 있다면 이를 따르는 것이 좋다

c=C{i}로 색깔을 바꾸자

기본적으로 사용되는 color palette는 C0, C1, … C9 까지의 총 9개이고, 하나의 axis에 새로운 plot을 추가할 때마다 색깔이 C0C1C2 .. 로 색이 자동으로 바뀐다.
Custom 하게 색깔을 정해야 할 경우가 많은데, 귀찮으면 이 9개 색깔 중 골라서 사용하면 된다. 유용한 색깔 몇 개를 아래와 같이 적어 보았다.
기본 palette
C0
파란색
C1
주황색
C2
초록색
C3
빨간색
C7
회색
fig = plt.figure(figsize=(8, 1.5)) for i, c in enumerate([0, 1, 2, 3, 7]): ax = fig.add_subplot(1, 5, i+1) ax.set_title(f'c = C{c}') ax.scatter(iris_full['sepal length (cm)'], iris_full['petal length (cm)'], c=f'C{c}') ax.set_xlabel('Sepal length (cm)') ax.set_ylabel('Petal length (cm)')
Python
복사

c='소숫점 값'으로 회색 계열의 명도를 바꾸자

Plot에서 원하는 부분을 강조하기 위해서 회색 계열을 잘 사용하는 것이 중요할 때가 있다.
회색 계열 색깔의 명도를 조절하는 방법은 c값에 01 사이의 소숫점 값을 주면 된다.
1로 갈수록 더 밝아진다 (흐릿해진다)
fig = plt.figure(figsize=(8, 1.5)) for i, c in enumerate([0.1, 0.3, 0.5, 0.7, 0.9]): ax = fig.add_subplot(1, 5, i+1) ax.set_title(f'c = {c}') ax.scatter(iris_full['sepal length (cm)'], iris_full['petal length (cm)'], c=f'{c}') ax.set_xlabel('Sepal length (cm)') ax.set_ylabel('Petal length (cm)')
Python
복사

sns.desaturate 으로 채도를 변경하자

잘 사용하지는 않지만, 같은 색 계열이라도 다른 채도를 설정하여 sub-category를 구별해야 할 때가 있다.
sns.desaturate(color, saturation) 을 이용하면 채도를 바꿀 수 있다. 아래는 C0 색의 채도를 바꾸는 예시.
fig = plt.figure(figsize=(8, 1.5)) for i, sat in enumerate(reversed([0.1, 0.3, 0.5, 0.7, 0.9])): ax = fig.add_subplot(1, 5, i+1) ax.set_title(f'saturation = {sat}') ax.scatter(iris_full['sepal length (cm)'], iris_full['petal length (cm)'], color=sns.desaturate('C0', sat)) ax.set_xlabel('Sepal length (cm)') ax.set_ylabel('Petal length (cm)')
Python
복사