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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:22