seaburn의 열도를 돌려서 가리다

1. 시작


seabrn의 열지도를 조정하세요.
구체적으로 열지도의 회전과 마스크를 진행한다.

2. 준비


2.1. 컨디션


Python 3.7.1을 사용합니다.
사용 환경은 Jupter notebook입니다.

2.2. 필요한 라이브러리

import numpy as np
import seaborn as sns

3. 열도의 회전


열지도를 회전시키다.

3.1. 우선 회전 행렬

heat = np.array([[0,1],[2,3]])

# 入力
print(
np.rot90(heat, k=0), 
np.rot90(heat, k=1),
np.rot90(heat, k=2),
np.rot90(heat, k=3),
sep='\n\n')

# 出力
[[0 1]
 [2 3]]

[[1 3]
 [0 2]]

[[3 2]
 [1 0]]

[[2 0]
 [3 1]]
90°의 회전을 확인할 수 있을 것 같습니다.

3.2. 히트맵 시각화

# DATAを可視化したい行列と書き換える
sns.heatmap(DATA, cmap='Blues',
            square=True, cbar_kws={"shrink": .5},
            xticklabels=0, yticklabels=0)
'3.1. 우선 회전 행렬'의 네 가지 결과가 가시화될 때
다음 그림과 같이 회전의 결과를 얻을 수 있다.

3.2. 수평 회전 매트릭스

heat = np.array([[0,1],[2,3]])

# 入力
print(
np.rot90(heat, k=1).T,  # == np.rot90(heat, k=2)[::-1],
np.rot90(heat, k=2).T,  # == np.rot90(heat, k=3)[::-1],
np.rot90(heat, k=3).T,  # == np.rot90(heat, k=4)[::-1],
np.rot90(heat, k=4).T,  # == np.rot90(heat, k=5)[::-1],
sep='\n\n')

# 出力
[[1 0]
 [3 2]]

[[3 1]
 [2 0]]

[[2 3]
 [0 1]]

[[0 2]
 [1 3]]
하트 좌우로 뒤집힌 행렬이 각각 90°씩 회전하는지 확인할 수 있을 것 같습니다.
다음 그림과 같이 시각화됩니다.

4.열도마스크


나는 뜨거운 지도가 필요 없는 곳에 마스크를 썼다.

4.1. 사전 처리 마스크


목적에 따라 변경해 주세요.
heat = np.ones((3,3))

# 1. 上三角行列をマスクする
mask = np.zeros((len(heat),len(heat)))
mask[np.triu_indices_from(mask, k=0)] = True  # k=1で対角成分を含める

# 2. 下三角行列をマスクする
mask = np.zeros((len(heat),len(heat)))
mask[np.tril_indices_from(mask, k=0)] = True  # k=1で対角成分を含める

# 3. 対角行列をマスクする
mask = np.eye(len(heat))

# 4. 特定の値をマスクする
mask = np.zeros((len(heat),len(heat)))
mask[np.where(heat==1)] = True                # np.where()の中に条件を入れる

4.2. 히트맵 시각화

# DATAを可視化したい行列と書き換える
sns.heatmap(DATA, cmap='Blues',
            square=True, cbar_kws={"shrink": .5},
            xticklabels=0, yticklabels=0, mask=mask)
마스크를 쓰지 않은 것부터 순서대로 본다.
  • 마스크 없음
  • 마스크 상 삼각 행렬
  • 마스크 삼각 행렬
  • 마스크 대각선 행렬
  • 마스크 특정 값
  • 4.3. 마스크 대신 0으로 변환


    마스크 착용이 아닌 성분을'0'으로 전환하려는 것이다.
    구체적으로 말하면mask가 1일 때의 행렬을 얻어 해당하는 부분을 0으로 고친다.
    for i in range(len(np.where(mask[:]==1)[0])):
        heat[np.vstack(np.where(mask[:]==1)).T[i][0], np.vstack(np.where(mask[:]==1)).T[i][1]]=0
    

    5. 마지막


    나는 seabrn의 핫맵 조정을 많이 썼는데, 어때?
    만약 이해하지 못하는 부분과 잘못된 점이 있다면 지적해 주십시오.

    참조 링크


    ・NumPy 배열은 ndray의np를 회전합니다.rot90
    https://note.nkmk.me/python-numpy-rot90/
    ・numby.triu_indices
    https://docs.scipy.org/doc/numpy/reference/generated/numpy.triu_indices.html

    좋은 웹페이지 즐겨찾기