You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GNUPLOT中制作带普朗克曲线的彩虹填充可见光区域矩形

实现彩虹填充矩形搭配普朗克曲线的Gnuplot方案

嘿,我之前也碰到过这个问题——Gnuplot的set object确实没法直接给矩形用调色板渐变填充,不过我们可以换个思路,用伪数据+pm3d绘图来模拟出彩虹渐变的背景矩形,完美适配你的需求!

核心思路

既然set object只支持单一颜色,那我们就用pm3d绘制一个完全覆盖目标矩形区域的“伪图层”,把波长(x轴)映射到彩虹调色板上,这样就能实现水平方向的彩虹渐变效果,之后再把普朗克曲线叠加在这个图层上面就行。

具体代码实现

下面是完整的可运行示例,我会一步步解释:

  1. 基础设置与调色板选择
    首先定义你的坐标轴范围,然后选一个合适的彩虹调色板。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")
    
  2. 绘制彩虹填充背景
    用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)颜色会从红渐变到紫,完全符合彩虹的光谱顺序。

  3. 叠加普朗克分布曲线
    接下来把你的普朗克函数绘制上去,记得调整曲线的样式(比如颜色、线宽)让它在彩虹背景上更清晰:

    # 示例:定义普朗克分布函数(替换成你实际的函数参数)
    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)'
    
  4. 细节优化
    最后可以调整一些显示细节,让图更美观:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:33:36