기본 색상 변경 #

[링크 삽입]에서 자세히 설명한 것처럼 jet경험적으로 잘못된 컬러맵이며 기본 컬러맵이 되어서는 안 됩니다. 플롯의 모양을 변경하면 이전 버전과의 호환성이 깨진다는 입장으로 인해 이 변경은 예상보다 훨씬 더 오래 연기되었습니다. imshow기본 색상 맵을 변경하는 것 외에도 플롯의 기본 색상 주기를 변경하고 채워진 플롯( , pcolor, contourf등) 및 분산형 플롯에 대해 다른 색상 맵을 채택할 기회를 잡을 계획 입니다.

기본 히트맵 컬러맵 #

새로운 컬러맵의 선택은 바이크 쉐딩("아니요, _이_ 색상이어야 합니다")에 대한 비옥한 기반이므로 제안된 컬러맵을 평가하기 위한 제안된 세트 기준(Nathaniel Smith를 통해)이 있습니다.

  • 순차적 컬러맵이어야 합니다. 데이터의 "중심"이 어디인지 알지 못하는 한 분기 컬러맵은 실제로 오해의 소지가 있고 기본 컬러맵의 경우 일반적으로 그렇지 않기 때문입니다.

  • 그것은 지각적으로 균일해야 합니다. 즉, 주변 색상이 얼마나 멀리 떨어져 있는지에 대한 인간의 주관적인 판단은 적어도 국지적으로는 색상이 나타내는 수치 간의 차이에 가능한 한 선형적으로 일치해야 합니다.

  • 지각적으로 균일한 휘도 램프를 가져야 합니다. 즉, 그레이스케일로 변환하더라도 여전히 균일해야 합니다. 이는 실용적인 측면(그레이스케일 프린터는 여전히 중요합니다!)과 휘도가 크기에 대한 매우 강력하고 자연스러운 단서이기 때문에 유용합니다.

  • 또한 색조에 어떤 종류의 변화가 있어야 합니다. 왜냐하면 색조 변화는 인식에 정말 도움이 되는 추가 신호이기 때문입니다.

  • 보다 일반적인 유형의 색맹을 가진 시청자에게도 합리적인 결과를 생성할 수 있도록 색조 변화를 선택해야 합니다. (적색-녹색과 같은 것을 배제합니다.)

  • 보너스 포인트의 경우, 휘도 변화를 버려도 여전히 작동하는 색조 램프를 선택하는 것이 좋을 것입니다. 그러면 2d 플롯에 휘도가 변화하는 버전을 사용할 수 있고 3d 플롯에 색조 변화만 있는 버전을 사용할 수 있기 때문입니다. (3d 플롯에서는 조명/음영을 위한 휘도 채널을 예약하고 싶습니다. 뇌가 휘도 변화에서 3d 모양을 추출하는 데 정말 능숙하기 때문입니다. 3d 표면 자체의 휘도가 크게 변하면 모양을 보는 능력이 망가집니다. )

  • 기존 IP를 침해하지 않음

예제 스크립트 #

제안된 컬러맵 #

기본 산란 컬러맵 #

히트 맵과 같은 응용 프로그램의 경우 가능한 한 많은 휘도 스케일을 포함하는 것이 바람직할 수 있지만 마커를 컬러 매핑할 때 마커가 흰색에 너무 가까워지면 문제가 될 수 있습니다. 이러한 이유로 우리는 마커 기반의 히트 맵에 대해 다른(하지만 아마도 관련이 있는) 컬러맵을 사용할 것을 제안합니다. 설계 매개변수는 위와 동일하지만 휘도 변화가 더 제한적입니다.

예제 스크립트 #

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1234)

fig, (ax1, ax2) = plt.subplots(1, 2)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radiuses

ax1.scatter(x, y, s=area, c=colors, alpha=0.5)


X,Y = np.meshgrid(np.arange(0, 2*np.pi, .2),
                  np.arange(0, 2*np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
Q = ax2.quiver(X, Y, U, V, units='width')
qd = np.random.rand(np.prod(X.shape))
Q.set_array(qd)

제안된 컬러맵 #

컬러 사이클 / 질적 컬러맵 #

라인을 플로팅할 때 구분 가능해야 하는 여러 라인이나 아티스트를 플로팅하는 것이 바람직하지만 고유한 순서는 없습니다.

예제 스크립트 #

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2)

x = np.linspace(0, 1, 10)

for j in range(10):
    ax1.plot(x, x * j)


th = np.linspace(0, 2*np.pi, 1024)
for j in np.linspace(0, np.pi, 10):
    ax2.plot(th, np.sin(th + j))

ax2.set_xlim(0, 2*np.pi)

제안된 색상 주기 #