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

如何在gnuplot中用k/m/b/t自定义Y轴数值格式替代科学计数法?

Gnuplot自定义Y轴单位(千k/百万m/十亿b/万亿t)

现有以下Gnuplot柱状图代码,当前Y轴用的是默认科学计数法前缀(比如M、G),想改成用k代表千、m代表百万、b代表十亿、t代表万亿的格式:

$Data << EOD
2021-09-30 83360000000.0000
2021-12-31 123945000000.0000
2022-03-31 97278000000.0000
2022-06-30 82959000000.0000
2022-09-30 90146000000.0000
2022-12-31 117154000000.0000
2023-03-31 94836000000.0000
2023-06-30 81797000000.0000
2023-09-30 89498000000.0000
EOD

set xdata time
set timefmt "%Y-%m-%d"

set format y "%.0s %c"

plot $Data using 1:2 with boxes

当然可以实现,核心是写一个自定义格式函数替换默认的%c前缀逻辑,直接看修改后的代码:

$Data << EOD
2021-09-30 83360000000.0000
2021-12-31 123945000000.0000
2022-03-31 97278000000.0000
2022-06-30 82959000000.0000
2022-09-30 90146000000.0000
2022-12-31 117154000000.0000
2023-03-31 94836000000.0000
2023-06-30 81797000000.0000
2023-09-30 89498000000.0000
EOD

set xdata time
set timefmt "%Y-%m-%d"

# 自定义单位转换函数:根据数值大小匹配对应单位
my_y_format(y) = y >= 1e12 ? sprintf("%.1f t", y/1e12) : \
                 y >= 1e9  ? sprintf("%.1f b", y/1e9) : \
                 y >= 1e6  ? sprintf("%.1f m", y/1e6) : \
                 y >= 1e3  ? sprintf("%.1f k", y/1e3) : \
                 sprintf("%.0f", y)

# 把Y轴格式绑定到自定义函数
set format y "%s" my_y_format

# 可选:手动设置Y轴刻度间隔,让显示更规整(这里按200亿间隔,可按需调整)
set ytics 20e9

plot $Data using 1:2 with boxes title "季度数值"

关键说明:

  • 自定义函数my_y_format会自动判断数值量级:
    • 1万亿及以上 → 除以1e12,后缀t
    • 1十亿及以上 → 除以1e9,后缀b
    • 1百万及以上 → 除以1e6,后缀m
    • 1千及以上 → 除以1e3,后缀k
    • 小于1千的数值直接显示原数
  • set format y "%s" my_y_format是核心,让Gnuplot用你写的函数来格式化Y轴刻度
  • 如果觉得自动生成的刻度太零散,就用set ytics手动指定间隔,比如示例里的20e9就是200亿

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:18:33