我想突出顯示值有效的網格邊緣。
這是一個例子。黃色網格的值為 2,而紫色網格的值為 1。目的是用不同的顏色繪制它們的邊緣。
import numpy as np
import matplotlib.pyplot as plt
z = np.full([5, 5], np.nan)
# grids with value = 1
z[1, 1] = 1
z[0, 2] = 1
z[1, 3] = 1
# grids with value = 2
z[3, 1] = 2
z[3, 2] = 2
z[3, 3] = 2
plt.pcolormesh(z)
plt.pcolormesh(z, edgecolors='red', facecolors='none')

目標:

uj5u.com熱心網友回復:
您可以遍歷 Z 并在每個不是 NaN 的位置繪制一個矩形。矩形的寬度和高度為1; clip_on=False可用于避免矩形在繪圖邊界附近被部分剪掉。
import matplotlib.pyplot as plt
import numpy as np
z = np.full([5, 5], np.nan)
# grid cells with value = 1
z[1, 1] = 1
z[0, 2] = 1
z[1, 3] = 1
# grid cells with value = 2
z[3, 1:4] = 2
fig, ax = plt.subplots()
ax.pcolormesh(z, cmap='Pastel1')
for i in range(z.shape[0]):
for j in range(z.shape[1]):
if not np.isnan(z[i, j]):
color = 'dodgerblue' if z[i, j] == 1 else 'crimson'
ax.add_patch(plt.Rectangle((j, i), 1, 1, fc='none', ec=color, lw=3, clip_on=False))
ax.axis('off') # hide axes
plt.show()

對于您的新問題,邊界不規則,代碼可能如下所示。請注意,每個維度中的單元格數比邊界數少一。另請注意,引數的順序Rect仍然是Rect((x,y),width,height),并且pcolormesh仍然繪制第z[i,j]' ith 行和j'th 列的內容。np.meshgrid負責訂購。
import matplotlib.pyplot as plt
import numpy as np
x1d = np.random.uniform(1, 3, 9).cumsum()
y1d = np.random.uniform(1, 3, 7).cumsum()
x, y = np.meshgrid(x1d, y1d)
z = np.random.randint(0, 3, (x.shape[0] - 1, x.shape[1] - 1)).astype(float)
z[z == 0] = np.nan
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z, cmap='spring')
for i in range(z.shape[0]):
for j in range(z.shape[1]):
if not np.isnan(z[i, j]):
color = 'dodgerblue' if z[i, j] == 1 else 'crimson'
ax.add_patch(
plt.Rectangle((x[i, j], y[i, j]), x[i, j 1] - x[i, j], y[i 1, j] - y[i, j],
fc='none', ec=color, lw=3, clip_on=False))
ax.axis('off') # hide axes
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451522.html
標籤:Python matplotlib
