如何在GNUPLOT中制作带普朗克曲线的彩虹填充可见光区域矩形
实现彩虹填充矩形搭配普朗克曲线的Gnuplot方案
嘿,我之前也碰到过这个问题——Gnuplot的set object确实没法直接给矩形用调色板渐变填充,不过我们可以换个思路,用伪数据+pm3d绘图来模拟出彩虹渐变的背景矩形,完美适配你的需求!
核心思路
既然set object只支持单一颜色,那我们就用pm3d绘制一个完全覆盖目标矩形区域的“伪图层”,把波长(x轴)映射到彩虹调色板上,这样就能实现水平方向的彩虹渐变效果,之后再把普朗克曲线叠加在这个图层上面就行。
具体代码实现
下面是完整的可运行示例,我会一步步解释:
基础设置与调色板选择
首先定义你的坐标轴范围,然后选一个合适的彩虹调色板。Gnuplot内置的rainbow调色板已经很接近可见光光谱,或者你也可以自定义更精准的颜色映射:# 设置坐标轴范围(和你之前的矩形一致) set xrange [3600:8200] set yrange [0:3.6] # 方案1:用内置彩虹调色板 set palette rgbformulae 33,13,10 # 红-橙-黄-绿-蓝-紫的标准彩虹渐变 # 方案2:自定义可见光精准光谱颜色(可选) # set palette defined (3600 "#8B00FF", 4200 "#0000FF", 4900 "#00FFFF", 5700 "#00FF00", 5900 "#FFFF00", 6200 "#FF7F00", 8200 "#FF0000")绘制彩虹填充背景
用Gnuplot的++伪数据生成覆盖整个矩形区域的网格,然后用pm3d绘制,把x轴的波长值作为颜色映射变量:# 绘制彩虹背景,noautoscale避免坐标轴被自动调整 plot '++' using 1:2:1 with pm3d notitle noautoscale # 设置pm3d在底层,确保曲线能叠加在上面 set pm3d at b这里
using 1:2:1表示用x坐标(波长)来决定颜色,所以从左到右(3600→8200nm)颜色会从红渐变到紫,完全符合彩虹的光谱顺序。叠加普朗克分布曲线
接下来把你的普朗克函数绘制上去,记得调整曲线的样式(比如颜色、线宽)让它在彩虹背景上更清晰:# 示例:定义普朗克分布函数(替换成你实际的函数参数) planck(x) = 2*6.626e-34*(3e8)**2/(x**5) * 1/(exp(6.626e-34*3e8/(1.38e-23*5800*x)) - 1) # 缩放函数到你的y轴范围(0→3.6) scaled_planck(x) = planck(x) * 3.6 / planck(5500) # 以5500nm峰值为基准缩放 # 叠加绘制普朗克曲线 replot scaled_planck(x) with lines lw 2 lc rgb 'black' title 'Planck Distribution (5800K)'细节优化
最后可以调整一些显示细节,让图更美观:set border 3 # 只显示x、y轴边框,去掉多余的边框线 set xlabel "Wavelength (Å)" set ylabel "Intensity" set grid y # 可选:添加y轴网格 unset colorbox # 如果不需要右侧的颜色条可以去掉
为什么这个方法可行?
set object是面向“单一对象”的绘图命令,不支持基于数据的颜色映射;而pm3d是专门用于绘制2D颜色渐变的工具,通过伪数据模拟矩形区域,就能间接实现我们想要的彩虹填充效果,和维基百科里的展示效果完全一致。
内容的提问来源于stack exchange,提问作者Isaac kyu-yeong Hwang
相关产品推荐
相关产品推荐

