【问题标题】:empty, zero and non-zero pixels representation in MatplotlibMatplotlib 中的空、零和非零像素表示
【发布时间】:2013-10-11 20:16:08
【问题描述】:

我正在尝试在 matplotlib 中绘制像素值获得非“-1”值的光线追踪路径。换句话说,我有以下代表 4 条光线路径的二维数组。射线穿过的每个像素都有随机值。除了这些相交的像素外,其余的都是“-1”。我想以白色或不可见(不存在)显示值“-1”。怎么可能?

import numpy as np
import scipy as sp
import pylab as pl

M = np.array([[ 0. , -1., -1., -1., -1., -1.],
          [ 0.25, -1.,-1.,-1.,-1.,-1.],
          [ 0.25, -1., -1., -1.,-1.,-1.],
          [ 0.22, -1., -1., -1., -1.,-1.],
          [ 0.16, -1., -1., -1., -1.,-1.],
          [ 0.16, -1., -1., -1., -1.,-1.],
          [ 0.13, -1., -1., -1., -1.,-1.],
          [ 0.10, -1., -1., -1., -1.,-1.],
          [-1., 0.06, 0.14, 0.087, 0.079,0.],
          [ 0., 0.16, 0.10, 0.15, 0.16, 0.],
          [-1., -1., 0., 0.004,-1., -1.]])

pl.subplot(111)
pl.imshow(M, origin='lower', interpolation='nearest')
pl.show()

【问题讨论】:

    标签: python python-2.7 numpy matplotlib


    【解决方案1】:

    另一种方法是使用颜色图(doc)set_underset_overset_bad属性

    from copy import copy
    
    # normalize data between vmin and vmax
    my_norm = matplotlib.colors.Normalize(vmin=.25, vmax=.75, clip=False)
    # clip=False is important, if clip=True, then the normalize function
    # clips out of range values to 0 or 1 which defeats what we want to do here.
    
    my_cmap = copy(cm.get_cmap('gray')) # make a copy so we don't mess up system copy
    my_cmap.set_under('r', alpha=.5) # make locations over vmax translucent red
    my_cmap.set_over('w', alpha=0)   # make location under vmin transparent white
    my_cmap.set_bad('g')             # make location with invalid data green
    
    test_data = np.random.rand(10, 10) # some random data between [0, 1]
    test_data[5, 5] = np.nan           # add one NaN
    # plot!
    imshow(test_data, norm=my_norm, cmap=my_cmap, interpolation='nearest')
    

    我认为这是一种比手工制作掩码数组更好的方法,因为您让matplotlib 为您完成工作,并且它可以让您明确地独立设置三个不同条件的颜色。

    【讨论】:

      【解决方案2】:

      您可以使用掩码数组。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html

      >>> masked = np.ma.masked_where(M==-1,M)
      >>> pl.subplot(111)
      >>> pl.imshow(masked, origin='lower', interpolation='nearest')
      >>> pl.show()
      

      【讨论】:

      • 伯尼,在这种情况下它也可以工作吗? plt.imshow(Masked, origin='lower', cmap = pl.cm.cmapname('jet') interpolation='nearest')
      • 当然。你可以先import matplotlib.cm as cm 然后pl.imshow(masked, origin='lower', cmap=cm.jet, interpolation='nearest')
      猜你喜欢
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多