python - 使用 pcolor 叠加两个图

标签 python numpy matplotlib overlay

我想在同一张图中绘制两个 numpy 数组 Z1 和 Z2,Z2 在 Z1 之上。数组 Z2 仅包含 0 和 1,我希望 0 完全透明 (alpha = 0),而 1 透明且某些 alpha > 0。

这是代码和生成的图像:

import numpy as np
import matplotlib.pyplot as plt

N = 10
x = np.arange(0, N)
y = np.arange(0, N)
Z1 = np.random.rand(N,N)
Z2 = np.ones((N, N))
Z2[0:N//2, 0:N] = 0

X, Y = np.meshgrid(x, y)
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 6))
plt.pcolormesh(X, Y, Z1, cmap=plt.cm.Blues)
plt.colorbar()
plt.pcolormesh(X, Y, Z2, cmap=plt.cm.Reds_r, alpha=0.3)
ax.set_xlabel(r'$x$', fontsize=22)
ax.set_ylabel(r'$y$', fontsize=22)
plt.show()

enter image description here

有两个问题:

  1. 不需要的网格线的外观

  2. Z2 的 0 没有按需要完全透明

要去除网格线,我们可以使用 imshow 而不是 pcolor,但我真的想使用 x 和 y 的值。

最佳答案

让一些像素透明的最简单的选择是根本不绘制它们。这可以通过将它们设置为 NaN(不是数字)来完成。

import numpy as np
import matplotlib.pyplot as plt

N = 10
x = np.arange(0, N)
y = np.arange(0, N)
Z1 = np.random.rand(N,N)
Z2 = np.ones((N, N))
Z2[0:N//2, 0:N] = np.nan

X, Y = np.meshgrid(x, y)
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 6))
plt.pcolormesh(X, Y, Z1, cmap=plt.cm.Blues)
plt.colorbar()
plt.pcolormesh(X, Y, Z2, cmap=plt.cm.Reds, vmin=0,vmax=1,alpha=0.3)
ax.set_xlabel(r'$x$', fontsize=22)
ax.set_ylabel(r'$y$', fontsize=22)
plt.show()

enter image description here

关于python - 使用 pcolor 叠加两个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48387847/

相关文章:

Python MySql 生成查询数组

python - Pandas 根据列 dtypes 进行应用

python - 将 pandas 数据框字符串条目拆分(分解)为单独的行

python - 使用 matplotlib 向图形添加误差线

python - 对 pandas/matplotlib 条形图中的条形顺序进行排序

python - 如何在Python 2.7.1中将一串字母变成3个字母的单词

python - 在 python 中测量时间的异常结果

Python散点图。标记的大小和样式

python - 如何在web.py/python中检查sql查询结果是否为空

python - 在张量中分配行会抛出 "None values not supported"