heatmap에 사선 (hatch) 추가 (python, matplotlib)
11594 단어 파이썬matplotlibnumpy
소개
히트 맵상에서 특정의 값을 나타내는 부분에 사선('/')을 그리고 싶었으므로, 메모.
하고 싶은 일
다음과 같은 히트 맵에서 특정 값의 부분을 사선으로 좋은 느낌으로 하고 싶다.
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
fig.colorbar(ax1)
위의 그림에서 Z[3:5, 5:8] = 1
는 그림의 일부 값을 1로 설정합니다.
이 Z[3:5, 5:8]
부분에 사선을 그립니다.
해결 방법
최종 코드는 다음과 같습니다.
np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
fig.colorbar(ax1)
무엇을 하고 있는가
위의 코드에서 처음과 다른 것은 다음 두 줄입니다.
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
첫 번째 행: 행렬 마스크
부분만 사선으로 나타내기 위해 코드의 1행째로 그 부분을 나타내는 행렬(Zm
)을 작성하고 있습니다.
numpy.ma.masked_where
를 사용하면 조건에 해당하는 부분이 무효화 된 (마스킹 된) 행렬을 만들 수 있습니다.
참고: numpy.ma.masked_where 공식 문서
원래 행렬 (Z
)과 마스크 된 행렬 (Zm
)은 다음과 같습니다.
행렬의 내용을 보면 Zm
에서는 조건식 (Z!=1
)에 해당하는 요소 이외는 --
로 표현됩니다.
플롯 할 때이 행렬 Zm
을 사용하여 조건식에 해당하는 부분을 무시하고 플롯을 수행 할 수 있습니다.
두 번째 줄: 해치로 사선을 그립니다.
참고: python – matplotlib 2.0에서 영역을 해치 전용 (배경색 없음)으로 채우려면 어떻게해야합니까?
코드의 두 번째 행에서는 행렬 Zm
을 사용하여 사선을 그립니다.matplotlib.pyplot.pcolor
에서는 다음 패턴의 해치를 사용할 수 있습니다.
/- diagonal hatching
\- back diagonal
|- vertical
- - horizontal
+ - crossed
x - crossed diagonal
o - 작은 circle
O - 대형 circle
.- dots
* - stars
참고: matplotlib.collections.Collection.set_hatch
여기에서 사용한 옵션은 다음과 같습니다.
다음과 같은 히트 맵에서 특정 값의 부분을 사선으로 좋은 느낌으로 하고 싶다.
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
fig.colorbar(ax1)
위의 그림에서
Z[3:5, 5:8] = 1
는 그림의 일부 값을 1로 설정합니다.이
Z[3:5, 5:8]
부분에 사선을 그립니다.해결 방법
최종 코드는 다음과 같습니다.
np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
fig.colorbar(ax1)
무엇을 하고 있는가
위의 코드에서 처음과 다른 것은 다음 두 줄입니다.
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
첫 번째 행: 행렬 마스크
부분만 사선으로 나타내기 위해 코드의 1행째로 그 부분을 나타내는 행렬(Zm
)을 작성하고 있습니다.
numpy.ma.masked_where
를 사용하면 조건에 해당하는 부분이 무효화 된 (마스킹 된) 행렬을 만들 수 있습니다.
참고: numpy.ma.masked_where 공식 문서
원래 행렬 (Z
)과 마스크 된 행렬 (Zm
)은 다음과 같습니다.
행렬의 내용을 보면 Zm
에서는 조건식 (Z!=1
)에 해당하는 요소 이외는 --
로 표현됩니다.
플롯 할 때이 행렬 Zm
을 사용하여 조건식에 해당하는 부분을 무시하고 플롯을 수행 할 수 있습니다.
두 번째 줄: 해치로 사선을 그립니다.
참고: python – matplotlib 2.0에서 영역을 해치 전용 (배경색 없음)으로 채우려면 어떻게해야합니까?
코드의 두 번째 행에서는 행렬 Zm
을 사용하여 사선을 그립니다.matplotlib.pyplot.pcolor
에서는 다음 패턴의 해치를 사용할 수 있습니다.
/- diagonal hatching
\- back diagonal
|- vertical
- - horizontal
+ - crossed
x - crossed diagonal
o - 작은 circle
O - 대형 circle
.- dots
* - stars
참고: matplotlib.collections.Collection.set_hatch
여기에서 사용한 옵션은 다음과 같습니다.
np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
fig.colorbar(ax1)
위의 코드에서 처음과 다른 것은 다음 두 줄입니다.
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
첫 번째 행: 행렬 마스크
부분만 사선으로 나타내기 위해 코드의 1행째로 그 부분을 나타내는 행렬(
Zm
)을 작성하고 있습니다.numpy.ma.masked_where
를 사용하면 조건에 해당하는 부분이 무효화 된 (마스킹 된) 행렬을 만들 수 있습니다.참고: numpy.ma.masked_where 공식 문서
원래 행렬 (
Z
)과 마스크 된 행렬 (Zm
)은 다음과 같습니다.행렬의 내용을 보면
Zm
에서는 조건식 (Z!=1
)에 해당하는 요소 이외는 --
로 표현됩니다.플롯 할 때이 행렬
Zm
을 사용하여 조건식에 해당하는 부분을 무시하고 플롯을 수행 할 수 있습니다.두 번째 줄: 해치로 사선을 그립니다.
참고: python – matplotlib 2.0에서 영역을 해치 전용 (배경색 없음)으로 채우려면 어떻게해야합니까?
코드의 두 번째 행에서는 행렬
Zm
을 사용하여 사선을 그립니다.matplotlib.pyplot.pcolor
에서는 다음 패턴의 해치를 사용할 수 있습니다./- diagonal hatching
\- back diagonal
|- vertical
- - horizontal
+ - crossed
x - crossed diagonal
o - 작은 circle
O - 대형 circle
.- dots
* - stars
참고: matplotlib.collections.Collection.set_hatch
여기에서 사용한 옵션은 다음과 같습니다.
edgecolor
:hatch 의 색 facecolor
: hatch의 배경색. 'none'으로 설정하면 히트 맵의 색상을 남기고 hatch 만 표시 할 수 있습니다. linewidth
: 그리드의 두께. 0보다 큰 값을 지정하면 그리드가 표시됩니다. 옵션을 변경했을 때의 그림의 외관은 다음과 같습니다.
(
ax.pcolor
의 행 이외는 최종 코드와 같습니다)ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=1.0)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',linewidth=0.0)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='red',facecolor='none', linewidth=0.0)
참고 사이트 일람
numpy.ma.masked_where 공식 문서
python – matplotlib 2.0에서 영역을 해치 전용 (배경색 없음)으로 채우려면 어떻게해야합니까?
matplotlib.collections.Collection.set_hatch
Reference
이 문제에 관하여(heatmap에 사선 (hatch) 추가 (python, matplotlib)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/stktu_KU/items/48ab90d104c082eeb8d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)