我正在尝试在healpy.mollview上使用其他的颜色映射方案,我用以下代码成功了
from healpy import mollview
from pylab import arange, show, cm
m = arange(768)
mollview(m, cmap=cm.bwr)
show()
但是我得到了一个意外的蓝色背景,而且没有办法将其设置为白色。
我正在尝试在healpy.mollview上使用其他的颜色映射方案,我用以下代码成功了
from healpy import mollview
from pylab import arange, show, cm
m = arange(768)
mollview(m, cmap=cm.bwr)
show()
但是我得到了一个意外的蓝色背景,而且没有办法将其设置为白色。
healpy
似乎对其默认的颜色映射进行了修改,以改变超出范围时的颜色显示。因此,在将cm.bwr
提供给healpy
之前,我们需要做同样的修改。我们可以使用cmap.set_under('w')
将颜色设置为白色。
我认为这似乎是healpy
中的一个bug,因为这会影响您尝试使用的大多数颜色映射。
from healpy import mollview,cartview
from pylab import arange, show, cm
cmap = cm.bwr
cmap.set_under('w')
m = arange(768)
mollview(m, cmap=cmap)
show()
为了完全模拟healpy
对其默认颜色映射的操作(它使用jet
),我们需要设置over
,under
和bad
值。这是来自healpy
github的相关函数。
cmap=cm.bwr
cmap.set_over(cmap(1.0))
cmap.set_under('w')
cmap.set_bad('gray')
你看到的不是意料之外的背景颜色。你使用的调色板使得图中最低值呈现为蓝色。由于你周围的圆形物体似乎是零,因此在图中呈现为蓝色。尝试使用一个调色板,使其在零点处呈现为白色。
更新~/anaconda3/lib/python3.7/site-packages/healpy/projaxes.py
:
将所有的newcm.set_bad("gray")
替换为newcm.set_bad((1, 1, 1, 1))
。
在下面的示例中,我已将其更新为newcm.set_bad((0, 0, 0, .9))
以突出显示其工作原理。
@tmdavison的答案对于自定义规范化函数无效。但上述编辑可以解决问题。
from healpy import mollview
from pylab import arange, show, cm, Normalize
m = arange(768)
mollview(m, cmap=cm.bwr, norm=Normalize(vmin=0, vmax=768))
show()