Matplotlib을 사용하여 2D 열 지도 그리기
Matplotlib을 사용하여 2D 열 지도를 표시하려고 합니다.데이터는 각각 0에서 1 사이의 값을 갖는 n-by-n Numpy 배열입니다.따라서 이 배열의 (i, j) 요소에 대해 열 지도의 (i, j) 좌표에 정사각형을 표시하려고 합니다. 색상은 배열 내의 요소 값에 비례합니다.
이거 어떻게 해?
매개 변수가 있는 함수interpolation='nearest'
그리고.cmap='hot'
네가 하고 싶은 대로 해
import matplotlib.pyplot as plt
import numpy as np
a = np.random.random((16, 16))
plt.imshow(a, cmap='hot', interpolation='nearest')
plt.show()
Seaborn은 많은 수작업을 처리하여 차트 측면에 자동으로 구배를 그립니다.
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()
matplotlib의 pcolor/pcolormesh 함수는 데이터의 간격이 일정하지 않기 때문에 사용합니다.
matplotlib에서 가져온 예제:
import matplotlib.pyplot as plt
import numpy as np
# generate 2 2d grids for the x & y bounds
y, x = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100))
z = (1 - x / 2. + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
# x and y are bounds, so z should be the value *inside* those bounds.
# Therefore, remove the last value from the z array.
z = z[:-1, :-1]
z_min, z_max = -np.abs(z).max(), np.abs(z).max()
fig, ax = plt.subplots()
c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolormesh')
# set the limits of the plot to the limits of the data
ax.axis([x.min(), x.max(), y.min(), y.max()])
fig.colorbar(c, ax=ax)
plt.show()
2D의 경우numpy
어레이, 단순 사용imshow()
다음과 같은 이점이 있습니다.
import matplotlib.pyplot as plt
import numpy as np
def heatmap2d(arr: np.ndarray):
plt.imshow(arr, cmap='viridis')
plt.colorbar()
plt.show()
test_array = np.arange(100 * 100).reshape(100, 100)
heatmap2d(test_array)
이 코드는 연속적인 히트맵을 생성합니다.
다른 빌트인을 선택할 수 있습니다.colormap
여기서부터요.
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)
# Interpolate for plotting
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
...
사용하다matshow()
그것은 랩으로 싸여져 있다.imshow
행렬 표시에 유용한 기본값을 설정합니다.
a = np.diag(range(15))
plt.matshow(a)
https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.matshow.html
이것은 매트릭스 표시에 유용한 기본값을 설정하기 위해 imshow를 래핑하는 편리함수입니다.특히:
- 세트
origin='upper'
.- 세트
interpolation='nearest'
.- 세트
aspect='equal'
.- 체크 표시가 왼쪽 위쪽에 배치되어 있습니다.
- 눈금 형식은 정수 인덱스를 표시하도록 지정됩니다.
언급URL : https://stackoverflow.com/questions/33282368/plotting-a-2d-heatmap-with-matplotlib
'itsource' 카테고리의 다른 글
Linux에서 php에서 --enable-soap을 활성화하려면 어떻게 해야 하나요? (0) | 2023.01.28 |
---|---|
CSS 이행 효과를 일시적으로 디세블로 하는 가장 깨끗한 방법은 무엇입니까? (0) | 2023.01.28 |
타임스탬프(자동)는 언제 갱신됩니까? (0) | 2023.01.28 |
Java에서 로컬 변수가 초기화되지 않는 이유는 무엇입니까? (0) | 2023.01.28 |
성능 저하가 시작되기 전에 MySQL 데이터베이스를 얼마나 크게 만들 수 있습니까? (0) | 2023.01.28 |