所以我试图在 matplotlib 中实现一个符号样式的颜色比例,我通过将我的值缩放到 0-1 区域然后使用自定义颜色条刻度和标签来做到这一点。
我正在使用掩码将我的值分成三个部分,但它并没有像我预期的那样工作;
我首先这样做:
negMask = ma.masked_greater_equal(Z, -10**thresh, copy=True).mask
posMask = ma.masked_less_equal(Z, 10**thresh, copy=True).mask
linMask = ma.masked_outside(Z, -10**thresh, 10**thresh, copy=True).mask
为了得到我想要的三个面具。然后我开始缩放到 0-1 区域:
sizeNeg = int(np.ceil(log10(-minZ)) - thresh)
sizePos = int(np.ceil(log10(maxZ)) - thresh)
sizeLin = 2
totSize = sizeNeg + sizePos + sizeLin
Z.mask = negMask
Z = (-np.log10(-Z) - thresh) / totSize
如果我停在这里并绘制它,那么它的行为与预期一样,这是情节的一小部分:
您可以在其中看到它绘制负值,但不是正值 - 因为它们被掩盖了。
因此,我将掩码更改为正值掩码;
Z.mask = posMask
Z = (np.log10(Z) - thresh + sizeNeg + sizeLin) / totSize
但是当我这样做时,之前被屏蔽的所有值现在都只是1.0
. 那里的数据不见了。
这是我的意思的一个例子:
$ python
Python 2.6.6 (r266:84292, Sep 11 2012, 05:25:09)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> from numpy.ma import masked_where as mw
>>> a = np.arange(0,10,1)
>>> a = mw(False, a)
>>> a
masked_array(data = [0 1 2 3 4 5 6 7 8 9],
mask = False,
fill_value = 999999)
>>> mask1 = mw(a>4,a).mask
>>> mask2 = mw(a<6,a).mask
>>> mask1
array([False, False, False, False, False, True, True, True, True, True], dtype=bool)
>>> mask2
array([ True, True, True, True, True, True, False, False, False, False], dtype=bool)
>>> a.mask = mask1
>>> a
masked_array(data = [0 1 2 3 4 -- -- -- -- --],
mask = [False False False False False True True True True True],
fill_value = 999999)
>>> a = np.log10(a)
__main__:1: RuntimeWarning: divide by zero encountered in log10
>>> a
masked_array(data = [-- 0.0 0.301029995664 0.47712125472 0.602059991328 -- -- -- -- --],
mask = [ True False False False False True True True True True],
fill_value = 999999)
>>> a.mask = mask2
>>> a
masked_array(data = [-- -- -- -- -- -- 1.0 1.0 1.0 1.0],
mask = [ True True True True True True False False False False],
fill_value = 999999)
在屏蔽数组上使用np.log10
会破坏屏蔽值,因此当您取消屏蔽它们时,它们只是 all 1.0
。
我知道我可以将我的数组分成三个单独的数组,每个区域一个,但是之后我如何再次组合它们呢?