복붙노트

[PYTHON] Matplotlib로 2D 히트 맵 그리기

PYTHON

Matplotlib로 2D 히트 맵 그리기

Matplotlib을 사용하여 2D 히트 맵을 플롯하려고합니다. 내 데이터는 각각 0에서 1 사이의 값을 갖는 nxnnnumpy 배열입니다. 따라서이 배열의 (i, j) 요소의 경우, (i, j) 좌표의 사각형을 내 히트 맵은 배열의 요소 값에 비례하는 색상을가집니다.

어떻게해야합니까?

해결법

  1. ==============================

    1.interpolation = 'nearest'및 cmap = 'hot'매개 변수가있는 imshow () 함수는 원하는 것을 수행해야합니다.

    interpolation = 'nearest'및 cmap = 'hot'매개 변수가있는 imshow () 함수는 원하는 것을 수행해야합니다.

    import matplotlib.pyplot as plt
    import numpy as np
    
    a = np.random.random((16, 16))
    plt.imshow(a, cmap='hot', interpolation='nearest')
    plt.show()
    

  2. ==============================

    2.여기에 꽤 늦게 응답하지만 어쨌든 ... Seaborn은 많은 수작업을 처리하고 차트 측면에 그라디언트를 자동으로 그립니다.

    여기에 꽤 늦게 응답하지만 어쨌든 ... Seaborn은 많은 수작업을 처리하고 차트 측면에 그라디언트를 자동으로 그립니다.

    e.

    import numpy as np
    import seaborn as sns
    import matplotlib.pylab as plt
    
    uniform_data = np.random.rand(10, 12)
    ax = sns.heatmap(uniform_data, linewidth=0.5)
    plt.show()
    

    또는 정사각형 행렬의 왼쪽 / 오른쪽 삼각형의 위 / 아래를 그릴 수도 있습니다 (예 : 정사각형이며 대칭 인 상관 행렬). 따라서 모든 값을 플롯하면 어쨌든 중복 될 수 있습니다.

    corr = np.corrcoef(np.random.randn(10, 200))
    mask = np.zeros_like(corr)
    mask[np.triu_indices_from(mask)] = True
    with sns.axes_style("white"):
        ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True,  cmap="YlGnBu")
        plt.show()
    

    희망이 도움이됩니다!

  3. ==============================

    3.csv에서 수행하는 방법은 다음과 같습니다.

    csv에서 수행하는 방법은 다음과 같습니다.

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.interpolate import griddata
    
    # Load data from CSV
    dat = np.genfromtxt('dat.xyz', delimiter=' ',skip_header=0)
    X_dat = dat[:,0]
    Y_dat = dat[:,1]
    Z_dat = dat[:,2]
    
    # Convert from pandas dataframes to numpy arrays
    X, Y, Z, = np.array([]), np.array([]), np.array([])
    for i in range(len(X_dat)):
            X = np.append(X,X_dat[i])
            Y = np.append(Y,Y_dat[i])
            Z = np.append(Z,Z_dat[i])
    
    # create x-y points to be used in heatmap
    xi = np.linspace(X.min(),X.max(),1000)
    yi = np.linspace(Y.min(),Y.max(),1000)
    
    # Z is a matrix of x-y values
    zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')
    
    # I control the range of my colorbar by removing data 
    # outside of my range of interest
    zmin = 3
    zmax = 12
    zi[(zi<zmin) | (zi>zmax)] = None
    
    # Create the contour plot
    CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.rainbow,
                      vmax=zmax, vmin=zmin)
    plt.colorbar()  
    plt.show()
    

    여기서 dat.xyz는 형식입니다.

    x1 y1 z1
    x2 y2 z2
    ...
    
  4. from https://stackoverflow.com/questions/33282368/plotting-a-2d-heatmap-with-matplotlib by cc-by-sa and MIT license