2
我想作的频谱,其中,所述曲线下的面积将根据光的相应的颜色被阴影的曲线图。就像这个图:Matplotlib - 曲线下颜色基于光谱颜色
我试图在matplotlib仿效这一点,通过使用imshow
与spectral
颜色表绘制的颜色和白色fill_between
来掩盖曲线以上的区域。我对结果很高兴,除了两件事情:
1),我绘制颜色不太与可见光谱一致。例如,当它呈现红色时,我会将700纳米显示为黄色/橙色。我对一个有点风格化的表示感到满意(例如,我认为第二个回答here中显示的准确颜色很无聊),但总的来说,我希望波长与其可见颜色对齐。
2)我喜欢的频谱以上如何具有alpha < 1.0着色的可见区以外的区域。我不知道如何实现这一点。
这是我到目前为止有:
所有的import numpy as np
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 1, figsize=(8,4), tight_layout=True)
wavelengths = np.linspace(200, 1000, 1000)
spectrum = (5 + np.sin(wavelengths*0.1)**2) * np.exp(-0.00002*(wavelengths-600)**2)
plt.plot(wavelengths, spectrum, color='darkred')
y = np.linspace(0, 6, 100)
X,Y = np.meshgrid(wavelengths, y)
X[X<400] = 400
extent=(np.min(wavelengths), np.max(wavelengths), np.min(y), np.max(y))
plt.imshow(X, clim=(350,820), extent=extent, cmap=plt.get_cmap('spectral'), aspect='auto')
plt.xlabel('Wavelength (nm)')
plt.ylabel('Intensity')
plt.fill_between(wavelengths, spectrum, 8, color='w')
plt.savefig('WavelengthColors.png', dpi=200)
plt.show()
我不明白你为什么说在链接的问题的第二个答案是枯燥的,不只是你需要什么? –
我想我会更喜欢颜色地图在400纳米处变成紫色,并且有一段青色。即使这个数字比那个答案中的数字少,我认为它会更好看。 – DanHickstein
我不认为你可以重写/操纵这样的CMAP,但你可以使用matplotlib的[参考](https://matplotlib.org/examples/pylab_examples/custom_cmap.html)上,并使用已知的创建一个算法就像答案中的链接。 –