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

gnuplot绘制可变列数行堆叠直方图的技术问题咨询

Gnuplot绘制可变列数行堆叠直方图的解决方法

问题1:自动包含所有列的解决方案

Gnuplot无法直接自动识别数据的全部列,但可以通过stats命令先统计数据的最大列数,再用循环生成绘图指令,无需手动逐个指定列。

修改后的完整脚本:

# 统计数据文件的最大列数
stats "data.dat" nooutput
max_col = STATS_columns

# Y轴配置
set yrange [0:*]
set format y '%.1s%c'  # 自动适配K/M/G等单位

# 图例与样式设置
set nokey
set style data histograms
set style histogram rowstacked
set boxwidth 0.5
set xtics rotate

# 循环绘制所有列,仅第一列指定X轴标签
plot for [i=2:max_col] "data.dat" using i:xtic(1) if i==2 else "" using i

问题2:部分元素显示异常的解决方案

异常原因是数据中存在极大值(如部分行数值达10^12级别)和极小值(如第12行的23088、第13行的所有数值),Y轴被极大值拉伸后,极小值对应的柱子被压缩到几乎不可见。

方案1:使用对数坐标轴

适合数值差异极大的场景,能让小数值柱子清晰显示:

set logscale y
set format y '%.1s%c'

将上述命令添加到Y轴配置部分即可。

方案2:为小柱子添加数值标签

保留线性Y轴,通过标签显示小柱子的具体数值:

# 修改plot命令,为每个柱子添加顶部标签
plot for [i=2:max_col] "data.dat" using i:xtic(1) with histogram, \
     for [i=2:max_col] "data.dat" using i:(i):i with labels offset 0,1

标签会显示在柱子顶部,即使柱子很小也能直观看到数值。

方案3:手动调整Y轴范围

如果仅关注部分行的数据,可以手动设置Y轴上限,但会截断大数值的柱子,需谨慎使用:

set yrange [0:1e11]  # 根据实际数据调整范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:54:50