我想在python
的matplotlib
库中,用梯度和吸收线做一个恒星光谱。在
作为输入,我有一个.dat
文件,其在给定波长上的相对强度为[wavelenght in angstrom] [intensity]
。在
在给定的数据下创建这种梯度的好方法是什么?matplotlib
是否提供与可见光相对应的渐变?我怎样才能把以埃为单位的波长转换成给定的梯度。在
详细的答复将不胜感激!在
升级版1
好吧,我找到了几种将波长转换为RGB(here和here)的方法。但我仍然不知道如何将强度应用于它(也许是一些正在播放alpha频道?)还有,更重要的是,如何建立一个自定义配色方案渐变。在
升级版2
我为这个问题写了一个暴力的解决方案。但似乎应该有一个简单的出路。无论如何,这里是解决方案(也可以添加'alpha'
通道)。在
def generateColor(color):
nstep = 300
minW = 400
maxW = 700
bandW = maxW - minW
colorTuple = ()
for i in range(nstep + 1):
wlength = minW + i * bandW / nstep
colorTuple += ((1.0 * i / nstep, wav2RGB(wlength)[color] / 255.0, wav2RGB(wlength)[color] / 255.0),)
return colorTuple
def generateGradient():
return {'red': generateColor(0),
'green': generateColor(1),
'blue': generateColor(2)}
visibleSpec = LinearSegmentedColormap('visible', generateGradient())
这将生成colormap
实例,您只需将其用作cmap=visibleSpec
。函数wav2RGB
只需要以nm为单位的波长,并返回整数数组[R,G,B]
。这是(source)。在
你能根据你的光谱做一张彩色地图吗?
这并不完美,但它可能会帮助你:
相关问题 更多 >
编程相关推荐