使用matplotlib.pcolormesh()将颜色设置为透明的正确方法是什么?

5 投票
1 回答
10149 浏览
提问于 2025-04-18 00:01

我想把某个水平以下的值(在这个例子中是 0)用透明的方式显示出来,使用的是 matplotlib.pcolormesh(),但是我找的选项都没能成功。

我试过把 kwarg 设置为 vmin=1,也试过用 plt.cm.cmap.set_under(alpha=0) 来设置限制。

更新:在玩一个示例脚本的时候,我发现 vmin 在那里是正常工作的,所以可能是其他因素导致的问题。我正在使用 Basemap,并尝试绘制一个密度图,设置的级别是根据数据的最小值和最大值来定的(其他的值都是零)。

我的示例脚本显示了 vmin 的正常工作

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

x = np.linspace(1,4,num=4)
y = np.linspace(1,6,num=6)
x_mesh, y_mesh = np.meshgrid(x,y)

ydim, xdim = x_mesh.shape

z = np.zeros(((ydim-1),(xdim-1)))

for j in range(ydim-1):
    for i in range(xdim-1):
        z[j,i] = (random.random())+4.

z[1:4,1:2]=0

cmap = plt.cm.Reds
plt.pcolormesh(x,y,z, cmap=cmap, vmin=4)

plt.show()

输出结果

在这里输入图片描述

1 个回答

5

你可以使用一个被遮罩的数组:

import matplotlib.pyplot as plt
import numpy as np

z = np.sin(np.arange(100) / 2).reshape(10, 10)
z = np.ma.masked_array(z, z < -.5)

cmap = plt.cm.Reds
plt.pcolormesh(z, vmin=-1, vmax=1, cmap="RdYlBu")
plt.colorbar()

在这里输入图片描述

撰写回答