如何在gnuplot绘图时处理阈值范围内的值?
嘿,这个需求在gnuplot里其实有挺简便的实现方式,不用手动修改原始矩阵数据,直接在绘图命令里处理就行,给你两个实用方案:
方案1:将阈值内的值设为白色(可视化时)
如果只是想在绘图时把-2 ≤ 值 ≤ 2的区域显示为白色,最直接的方式是结合条件判断和gnuplot的缺失值(NaN)处理:
# 配置可视化样式 set pm3d map # 用平面映射模式展示矩阵(适合热图) set pm3d NaNcolor "white" # 把缺失值的显示颜色设为白色 set cbrange [-5:3] # 匹配你的数据范围:最小-5,最大3 set palette defined (-5 "dark-blue", -2 "blue", 2 "red", 3 "dark-red") # 自定义阈值外的颜色 # 绘图命令:用三元表达式把阈值内的值转为NaN(1/0) splot "your_matrix_data.txt" matrix using 1:2:(($3 >= -2 && $3 <= 2) ? 1/0 : $3) with pm3d
如果你的数据是直接写在脚本里(不用外部文件),可以用 inline 数据:
set pm3d map set pm3d NaNcolor "white" set cbrange [-5:3] set palette defined (-5 "dark-blue", -2 "blue", 2 "red", 3 "dark-red") splot '-' matrix using 1:2:(($3 >= -2 && $3 <= 2) ? 1/0 : $3) with pm3d -2 1 2 0 2 -5 3 0 1 e # 标记数据结束
关键说明:
matrix:告诉gnuplot输入是矩阵格式,自动识别行列索引($3 >= -2 && $3 <= 2) ? 1/0 : $3:三元表达式,满足阈值条件就返回NaN(gnuplot中1/0代表缺失值),否则保留原始值set pm3d NaNcolor "white":强制将缺失值的显示颜色设为白色
方案2:将阈值内的值标记为缺失值(通用处理)
如果你想让gnuplot完全忽略阈值内的值(不仅是可视化),同样可以用三元表达式把这些值转为NaN,后续任何绘图命令都会把它们当作缺失值处理:
# 示例:用散点图展示,阈值内的点会被自动忽略 set style fill solid splot "your_matrix_data.txt" matrix using 1:2:(($3 >= -2 && $3 <= 2) ? 1/0 : $3) with points pt 5 ps 3 lc palette
如果需要把处理后的数据保存到新文件(方便后续复用),可以用set print命令:
set print "processed_matrix.txt" do for [i=1:3] { # 你的矩阵是3行,所以循环3次 line = system("sed -n ".i."p your_matrix_data.txt") split(line, vals, " ") output_line = "" do for [val in vals] { output_val = (val >= -2 && val <= 2) ? "NaN" : val output_line = output_line." ".output_val } print substr(output_line, 2) # 去掉开头的空格 } set print
内容的提问来源于stack exchange,提问作者Cokolwiek
相关产品推荐
相关产品推荐

