|
From: Benjamin R. <ben...@ou...> - 2012-01-02 18:13:40
|
On Mon, Jan 2, 2012 at 11:10 AM, Chao YUE <cha...@gm...> wrote: > Dear all matplotlib users, > > Happy New Year. > I try to check the distribution of a 2D array and I find that the > histogram plot function doesn't respect the numpy masked array? > > > In [188]: a=range(1,6); b=np.array(a+a[::-1]) > > In [189]: b=np.ma.masked_equal(b,2); b=np.ma.masked_equal(b,5) > > In [190]: b > Out[190]: > masked_array(data = [1 -- 3 4 -- -- 4 3 -- 1], > mask = [False True False False True True False False True > False], > fill_value = 5) > > > In [191]: n,bins,patches=plt.hist(b) > > In [192]: n > Out[192]: array([2, 0, 2, 0, 0, 2, 0, 2, 0, 2]) > > In [193]: n.sum() > Out[193]: 10 > > it seems that all the elements (masked or not) are counted in the history > plotting? > and the original value is used but not the fill_value? > > I attach a figure below. > > In [194]: plt.show() > > Yes, this is a known issue (at least, from the comments within the function). Looks like hist() uses np.asarray() instead of np.asanyarray(), which would result in the array being stripped of its mask. However, I don't think the fix is as straight-forward as changing that to np.asanyarray(). I will take a peek and see what can be done. Ben Root |