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

如何在Gnuplot中制作以文件名作为ztics的3D图表

Gnuplot 实现按年份文件追踪数据变化的解决方案

原代码问题分析

你之前的代码存在几个关键错误:

  • 变量名不统一:定义了filelist但后续使用未定义的list
  • ztics=list无意义,未对年份刻度做有效配置
  • splot的using语法错误,无法直接用文件名列表作为数据列,且未处理表头行

数据文件前提

假设你的数据文件都是年份命名的CSV文件(如2020.csv、2021.csv),格式如下:

Source,Count
Foo,8452
Bar,8304

方案1:2D多曲线对比(直观展示各年份数据)

适合快速对比不同年份的Source对应Count值,代码如下:

set datafile separator ","
# 仅获取4位年份命名的CSV文件,避免无关文件干扰
filelist = system("ls [0-9][0-9][0-9][0-9].csv")
# 设置X轴文本标签旋转,避免重叠
set xtic rotate by 45 right
# 用文件名作为每条曲线的图例标题
plot for [fname in filelist] fname using 2:xtic(1) skip 1 with linespoints title fname

代码解释

  • using 2:xtic(1):用第二列(Count)作为Y轴数值,第一列(Source)作为X轴文本标签
  • skip 1:跳过首行的表头(Source,Count)
  • title fname:将文件名(年份)作为曲线的图例名称

方案2:3D曲线(展示数据随年份的变化趋势)

若要突出年份维度的变化,可使用3D绘图,将年份作为Z轴:

set datafile separator ","
filelist = system("ls [0-9][0-9][0-9][0-9].csv")
# 配置Z轴刻度为年份数值
set ztics
# X轴文本标签旋转优化显示
set xtic rotate by 45 right
# 提取文件名中的年份作为Z轴数值,用Source作为X标签
splot for [fname in filelist] fname using 0:2:real(substr(fname,1,4)):xtic(1) skip 1 with linespoints title fname

代码解释

  • real(substr(fname,1,4)):从文件名(如2020.csv)提取前4位字符,转换为实数作为Z轴的年份值
  • using 0:2:...:0是Gnuplot自动生成的X索引(因文本无法直接作为3D坐标),2为Y轴的Count值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:30:17