Python Matplotlib:带有imshow的特定颜色

Python Matplotlib:带有imshow的特定颜色,python,matplotlib,Python,Matplotlib,我有一些3D数据,例如d=[x,y,z,f] 其中z是z中的一列数字,用作颜色信息 f是一个 如果x和y具有某些特定值(丑^^),则为0 1如果x和y正常 因此,对于好的数据d[d[:,3]==1]我想生成一个配置文件 plt.imshow(resampled.T, extent=extent, vmin=MIN, vmax=MAX, origin='lower') 对于丑陋的数据d[d[,3]==0]我只想使用一种特定的颜色,例如黑色 有没有办法实现这一点 编辑:结合@eumiro和@Rut

我有一些3D数据,例如
d=[x,y,z,f]
其中
z
是z中的一列数字,用作颜色信息

f
是一个

  • 如果
    x
    y
    具有某些特定值(丑^^),则为0
  • 1如果
    x
    y
    正常
  • 因此,对于好的数据
    d[d[:,3]==1]
    我想生成一个配置文件

    plt.imshow(resampled.T, extent=extent, vmin=MIN, vmax=MAX, origin='lower')
    
    对于丑陋的数据
    d[d[,3]==0]
    我只想使用一种特定的颜色,例如黑色

    有没有办法实现这一点

    编辑:结合@eumiro和@Rutger Kassies的评论,我现在得到以下结果

    我认为这是令人满意的。 为了完整性(或者可能有一些优化我不知道^^^),以下是代码和:


    你不能用f来遮罩z,在z中创建一个普通的颜色贴图吗

    dd = d[:, :3]
    dd[:,2] = dd[:,2] * d[:,3]
    
    然后转换为如下图像:

    M = dd.max(0)
    m = dd.min(0)
    
    x = np.arange(m[0], M[0] + 1)
    y = np.arange(m[1], M[1] + 1)
    [X, Y] = np.meshgrid(x, y)
    
    Z = np.zeros_like(X)
    
    for num in range(0,size(dd, 0)):
        Z[dd[num, 0], dd[num, 1]] = dd[num, 2]
    

    现在,您应该能够像绘制普通图像一样绘制
    Z
    ,或者像绘制曲面一样绘制
    [X,Y]

    np.nan
    替换所有“丑陋的数据”怎么样?确实是eumeriro。蒙版阵列将非常方便。然后可以使用cmap.set_bad()属性控制可视化@Tengis,你应该提供一个有效的例子。例如,x、y、z数据是规则网格化的还是分散的点?代码中的c是什么?我喜欢你的想法,但似乎没有必要挂国旗。我不知道np.nan idea.oops c一定是d或dd(甚至dd[:,:2])的输入错误,其目的是找到绘制图像所需的网格范围,无论它是否为规则网格。虽然这段代码假设x和y只包含整数,但这是一个很容易修改的方法
    M = dd.max(0)
    m = dd.min(0)
    
    x = np.arange(m[0], M[0] + 1)
    y = np.arange(m[1], M[1] + 1)
    [X, Y] = np.meshgrid(x, y)
    
    Z = np.zeros_like(X)
    
    for num in range(0,size(dd, 0)):
        Z[dd[num, 0], dd[num, 1]] = dd[num, 2]