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

Gnuplot如何按昼夜时段设置时序图背景色并保留缩放功能

Gnuplot 长时序昼夜背景实现方案

核心用单条splot命令同时渲染背景层和数据曲线,完全规避multiplot带来的缩放不同步问题,全程不占用y轴做颜色映射,性能完全适配你10秒分辨率、数十万秒跨度的数据集。

  • 颜色映射完全绑定时间轴(x轴)的昼夜状态值,y轴全程只用于展示实际时序数据的数值,不会被颜色逻辑占用
  • 背景层放在绘图区最底部,数据曲线抬升到背景层上方绘制,不需要额外叠加图层
  • 支持连续渐变/硬边分块两种效果,渲染负载和你原绘图逻辑几乎无差异,不会增加额外加载延迟
  • 所有元素在同一个坐标系内,缩放、平移操作完全正常,不会出现图层错位

核心配置逻辑

  1. 自定义调色板:0值对应夜间深蓝色,1值对应白天白色,默认线性插值生成晨昏过渡效果,切换为硬边阈值即可实现块状昼夜分块
  2. pm3d配置为贴在绘图区最底层,关闭多余边框,按x轴采样点匹配颜色
  3. 用+伪文件生成和你数据采样率对齐的背景网格,不需要额外高分辨率插值,避免冗余计算
  4. 实际数据曲线的z值统一设为高于背景层的固定值,直接用线图模式绘制,不参与颜色映射

可直接运行的测试代码

测试阶段直接用1天(86400秒)周期的正弦函数模拟昼夜值,后续替换成你自己的昼夜时长计算逻辑即可:

# 基础边距配置
unset colorbox
set tmargin at screen 0.95
set bmargin at screen 0.1
set lmargin at screen 0.12
set rmargin at screen 0.95

# 自动统计数据y轴范围,预留5%边距
stats 'your_data_file.csv' using 2 nooutput
y_min = STATS_min - (STATS_max - STATS_min)*0.05
y_max = STATS_max + (STATS_max - STATS_min)*0.05
set yrange [y_min:y_max]
set xrange [0:3*86400] # 示例设为3天跨度,按你实际数据范围调整

# 测试用昼夜值函数:0为深夜,1为正午,1天周期
day_cycle = 86400
day_val(t) = 0.5 + 0.5*sin(2*pi*t/day_cycle)

# 调色板配置:连续渐变效果
set palette defined (0 '#0a194d', 0.3 '#2b488a', 0.7 '#f2f2f7', 1 '#ffffff')
# 要硬边块状昼夜效果,注释上面一行,取消下面这行注释即可
# set palette defined (0 '#0a194d', 0.5 '#0a194d', 0.5001 '#ffffff', 1 '#ffffff')

# pm3d底层配置
set pm3d at b
set pm3d noborder
set pm3d corners2color c1
set samples 25920 # 3天*86400秒/10秒采样率=25920点,和你数据分辨率对齐
set isosamples 2 # y方向只需要2个点就能铺满整个y轴范围,最小化渲染负载

# 单条命令同时绘制背景+数据,缩放完全同步
splot \
  '+' using 1:(y_min + (y_max-y_min)*$2):(day_val($1)) with pm3d notitle, \
  'your_data_file.csv' using 1:2:(1) with lines lc 'black' lw 1.2 title '实测时序数据'

效果参考

昼夜背景时序图参考效果

性能说明

背景层y方向只需要2个采样点就能铺满整个y轴范围,总采样点数和你原数据集的x轴采样点数量完全一致,不会产生冗余渲染压力,和你原来单独plot数据的加载速度基本没有差别。

内容的提问来源于stack exchange,提问作者Karl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:51:26