색깔은 그림에서 가장 먼저 인식되는 요소이므로, 색깔을 잘 설정해야 figure가 전하고자 하는 메시지가 잘못 전달되는 일이 없고, 직관적으로 이해되는 좋은 figure를 만들 수 있다.
원칙
1.
논문 전체에 걸쳐서 일관된 원칙으로 색깔을 설정한다.
예) 동일한 카테고리에 대해서 동일한 색
2.
직관적인 색으로 설정하자.
예) 강조하고 싶은 item에는 채도가 높은 색, 나머지에는 채도가 낮은 색
예) 높은 값에는 붉은 계열, 낮은 값에는 푸른색 계열
예) 분야에서 널리 사용되고 있는 color mapping이 있다면 이를 따르는 것이 좋다
c=C{i}로 색깔을 바꾸자
기본적으로 사용되는 color palette는 C0, C1, … C9 까지의 총 9개이고, 하나의 axis에 새로운 plot을 추가할 때마다 색깔이 C0 → C1 → C2 .. 로 색이 자동으로 바뀐다.
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값에 0 과 1 사이의 소숫점 값을 주면 된다.
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
복사