我正在尝试使用imshow显示的2D数据。数据区域为nan,并标记为屏蔽。
由于各向异性之类的东西,我使用双线性插值并希望继续这样做。使用is_bad我很确定我正在按照我想要的方式渲染蒙版值,但是纳米颜色似乎渗透到数据的良好部分导致模糊。
有没有一种方法可以加强纳米和非纳米数据之间的界面?我是否必须识别边框并在其上划一条线,或者我可以使用imshow参数执行此操作吗?
谢谢!
利
答案 0 :(得分:2)
嗯,这是一个复杂的解决方案,但我不知道更好的解决方案。
只是为了向那些可能不熟悉它的人说明你所讨论的问题:
import numpy as np
import matplotlib.pyplot as plt
data = np.random.random((10,10))
data[[2, 5, 7], [5, 8, 1]] = np.nan
plt.imshow(data)
plt.show()
模糊是因为matplotlib会插入alpha(透明度)值。改变这种情况需要进行低级调整。
但是,只要您不需要在没有数据的区域中显示图层 图层,就可以执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# Generate some data...
data = np.random.random((10,10))
data[[2, 5, 7], [5, 8, 1]] = np.nan
# Convert it to a masked array instead of just using nan's..
data = np.ma.masked_invalid(data)
# Plot a version with the invalid data replaced with the mean...
plt.imshow(data.filled(data.mean()))
# Now plot a white (or whatever color you'd like), nearest-interpolated array
# over the invalid values...
bad_data = np.ma.masked_where(~data.mask, data.mask)
plt.imshow(bad_data, interpolation='nearest', cmap=mpl.cm.gray_r)
plt.show()
如果我们不使用“填充”版本(data.filled(data.mean())
)绘制原始数据,我们将在阻止的无效值周围得到“晕圈”: