matplotlib에서 imshow를 사용하여 데이터를 히트 맵으로 플로팅하려고하는데 일부 값은 NaN입니다. NaN을 컬러 맵에서 찾을 수없는 특수한 색상으로 렌더링하고 싶습니다.
예:
import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()
결과 이미지는 예기치 않게 모두 파란색 (제트 컬러 맵에서 가장 낮은 색상)입니다. 그러나 다음과 같이 플로팅을하면 :
ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)
-그런 다음 더 나은 것을 얻었지만 NaN 값은 vmin과 같은 색으로 그려집니다 … NaN이 특별한 색 (예 : 회색 또는 투명)으로 그려 지도록 설정할 수있는 우아한 방법이 있습니까?
답변
최신 버전의 Matplotlib에서는 더 이상 마스크 배열을 사용할 필요가 없습니다.
예를 들어 모든 7 번째 값이 NaN 인 배열을 생성 해 보겠습니다.
arr = np.arange(100, dtype=float).reshape(10, 10)
arr[~(arr % 7).astype(bool)] = np.nan
현재 컬러 맵을 수정하고 다음 줄로 배열을 플로팅 할 수 있습니다.
current_cmap = matplotlib.cm.get_cmap()
current_cmap.set_bad(color='red')
plt.imshow(arr)
답변
음, 마스크 배열을 사용하여이 작업을 수행 할 수있는 것 같습니다.
masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('white',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)
나는 여전히 제안에 열려 있지만 이것으로 충분할 것입니다. :]