Gnuplot设置Y轴最大值后,如何显示超限峰值的原始数值标签?
在gnuplot截断Y轴后显示峰值原始数值标签
我数据里存在远大于其他值的峰值,为避免常规绘图时其他数值被“归零”无法看清,设置了Y轴最大值(例如2000),但需要在被截断到2000的峰值附近显示它的原始数值(比如65392),该怎么实现?
我尝试过以下代码:
f(y) = y > 2000 ? 2000 : (y < -2000 ? -2000 : y) using 1:(f($3)) notitle with line lw 3
以及给峰值添加标签的代码:
fla(y)= y > 500 ? sprintf("%.0f", y) : (y < -500 ? sprintf("%.0f", y) : 1/0) using 1:(f($3)) notitle with line lw 3 using 1:(abs($3)>499 ? $3 : 1/0):(fla($3)) notitle with labels offset character 0, character 1 tc rgb "blue" right
解决方案
问题出在标签的Y坐标使用了原始峰值数值,导致标签超出了图的显示范围。只需把标签的Y位置固定在Y轴截断的边界上,就能让标签显示在图内的峰值附近。
调整后的代码示例:
# 定义Y轴截断函数,用于绘制曲线 f(y) = y > 2000 ? 2000 : (y < -2000 ? -2000 : y) # 定义标签的Y坐标:超阈值的点固定在截断边界,其余点过滤 label_y(y) = y > 2000 ? 2000 : (y < -2000 ? -2000 : 1/0) # 生成标签文本,显示原始数值 label_text(y) = sprintf("%.0f", y) # 绘制截断曲线+峰值标签 plot "你的数据文件.dat" using 1:(f($3)) notitle with line lw 3, \ "你的数据文件.dat" using 1:(label_y($3)):(label_text($3)) notitle with labels offset 0,1 tc rgb "blue" right
关键说明:
label_y(y)把需要标注的峰值标签位置锁定在Y轴截断处(2000或-2000),确保标签出现在图内- 用
1/0自动过滤掉不需要标注的点,避免无效绘图操作 - 可调整
offset参数(如offset 0,1)微调标签与峰值的相对位置,避免重叠
内容的提问来源于stack exchange,提问作者Pragmas
相关产品推荐
相关产品推荐

