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

如何用Gnuplot绘制Matlab风格3D直方图并将零值设为白色

实现Gnuplot 3D直方图零值显示白色(Matlab风格)

刚好我之前也折腾过类似的需求,要让Gnuplot的3D直方图和Matlab一样,把零值柱子显示为白色,非零值用调色板配色。其实核心就是通过自定义调色板+条件颜色映射来实现,下面是具体的步骤和可复用的代码示例:

1. 基础绘图参数设置(贴近Matlab风格)

先把坐标轴、视角、填充样式这些调整成Matlab常用的样子:

# 终端设置(可选,换成你需要的输出格式,比如png/pdf)
set terminal qt enhanced font "Arial,10"
set title "3D Histogram (Matlab Style)"
set xlabel "X Axis"
set ylabel "Y Axis"
set zlabel "Z Axis"
set view 60,30  # 视角接近Matlab默认的3D直方图角度
set style fill solid 1.0 border -1  # 实心填充柱子,隐藏边框
set boxwidth 0.8 relative  # 调整柱子宽度,避免过于拥挤
set grid ztics  # 显示Z轴网格,和Matlab风格一致

2. 自定义调色板:零值映射为白色

这是最关键的一步,我们要让数值为0(或近似0)的点对应白色,非零值用Matlab常用的调色板(比如Jet或Parula)。

方式一:用set palette defined直接定义(适合固定配色)

如果想模拟Matlab的Jet调色板,代码如下:

# 定义调色板:0值为白色,非零值从Jet配色的蓝色开始映射
set palette defined (0 1 1 1, \
                    0.0001 0 0 1, \  # 极小非零值对应Jet的蓝色
                    0.25 0 1 1, \
                    0.5 0 1 0, \
                    0.75 1 1 0, \
                    1 1 0 0)  # 最大值对应Jet的红色
set cbrange [0:*]  # 颜色范围自动适配数据的最大值

如果喜欢Parula配色(Matlab新版本默认),可以用这个近似定义:

set palette defined (0 1 1 1, \
                    0.0001 0.2081 0.1663 0.5292, \
                    0.25 0.0260 0.5683 0.8965, \
                    0.5 0.4967 0.8176 0.6207, \
                    0.75 0.9763 0.8436 0.1334, \
                    1 0.9764 0.4236 0.0539)
set cbrange [0:*]

方式二:用rgbfunction动态映射(适合需要灵活调整的场景)

如果你的数据里有近似零值(比如1e-10这种极小值),可以用函数式调色板做更灵活的判断:

# 先获取数据的最大值,用于颜色归一化
stats 'your_data.txt' using 3 name 'data'  # 假设数据是三列:x y z
max_z = data_max

# 自定义函数:小于1e-6的视为零,显示白色;否则按Parula风格映射
set palette rgbfunction(z) \
    (z < 1e-6 ? 1 : 0.2 + 0.7*(z/max_z)), \
    (z < 1e-6 ? 1 : 0.15 + 0.75*(z/max_z)^0.5), \
    (z < 1e-6 ? 1 : 0.5 + 0.5*(1 - z/max_z))
set cbrange [0:max_z]

3. 绘制3D直方图

最后用splot命令绘制,关键是把z值同时作为高度和颜色的变量:

# using 1:2:3:3 分别对应x坐标、y坐标、柱子高度、颜色映射值
splot 'your_data.txt' using 1:2:3:3 with boxes lc palette notitle

关键注意点

  • 如果你的零值不是精确的0,记得把调色板里的判断条件改成z < 阈值(比如1e-6),避免极小值被错误上色
  • lc palette表示用调色板来控制柱子颜色,一定要加上这个参数
  • 可以根据自己的需求调整调色板的颜色节点,完全匹配Matlab的配色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:04:18