티스토리 뷰

문제의 경우 첫 번째 수준을 0보다 크게 설정하고 colorbar의 확장 기능을 사용하여 0 x, y 위치를 지정하는 것이 좋습니다.

먼저 libs를 가져 와서 numpy희소 그리드에서의 정규 분포 함수 에서 임의의 데이터를 생성하려고 합니다.

from copy import copy

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors

# generate sample data
x0, x1 = -5, 5
y0, y1 = -3, 3
x = np.linspace(x0, x1, 60)
y = np.linspace(y0, y1, 60)
X, Y = np.meshgrid(x, y)
Z = np.random.randn(60, 60)

문제를 설명하기 위해 모든 음수 값을 0으로 설정하여 음수가 아닌 그리드 데이터를 렌더링합니다 Z.

Z = np.where(Z > 0, Z, 0)

이제 요점에 도달합니다! 범위를 벗어난 색상을 컬러 맵에 추가하기 만하면됩니다.

palette = copy(plt.get_cmap('viridis_r'))
palette.set_under('white', 1.0)  # 1.0 represents not transparent

set_over, set_bad메서드를 사용 하여 범위 초과 데이터 및 정의되지 않은 (NaN) 데이터의 색상을 설정할 수도 있습니다 .

서브 플롯 설정 :

fig, ax = plt.subplots(1, 1)

플롯에 대한 수준을 설정하지만 가장 낮은 수준을 0에 가까운 양수로 수정해야합니다.

levels = np.arange(0, 3.5, 0.5)
levels[0] = 1e-5

다음은 배열 Z를 플로팅하는 방법입니다.

norm = colors.BoundaryNorm(levels, ncolors=palette.N)
im = ax.imshow(Z, cmap=palette,
               norm=norm,
                              aspect='auto', extent=[x0, x1, y0, y1])
                              # Possible extend options include: ['min', 'max', 'both', 'neither']
                              cbar = fig.colorbar(im, extend='min', shrink=0.9, ax=ax)
                              plt.savefig('draw.png', dpi=300)
                              # or
                              # plt.show()
                              

draw.png

최저 레벨을 0.0으로 표시하면 약간의 모호함이 생길 수 있습니다. 레벨 [0]을 0.1로 설정하는 것이 더 나아 보입니다.

자세한 내용은 다음 링크를 참조하십시오.

https://matplotlib.org/examples/pylab_examples/image_masked.html

https://matplotlib.org/examples/pylab_examples/contourf_demo.html



출처
https://stackoverflow.com/questions/39917333
댓글
공지사항
Total
Today
Yesterday
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31