请求编写Gnuplot单行命令:为CSV每行生成带标题的折线图
解决Gnuplot按行绘制动态列数折线图的问题
错误原因
你之前的命令报错,是因为Gnuplot默认按列解析数据,它会把第一列当作数值类型的x轴数据,但你的第一列是字符串标题,第二行的标题无法被解析为数值,因此触发"Bad data"错误。
单行解决方案
以下命令可实现按行生成折线图,完全支持动态列数(后续追加行或列都能兼容):
gnuplot -e 'set datafile separator ","; stats "MyData.csv" nooutput; plot for [i=0:stats_records-1] "MyData.csv" every ::i::i using (column(0)-1):column(int(column(0))) title strcol(1) with linespoints'
命令细节拆解
set datafile separator ",":指定CSV文件的分隔符为逗号。stats "MyData.csv" nooutput:统计数据文件的总行数(结果存在stats_records变量中),不输出冗余统计信息。plot for [i=0:stats_records-1]:循环遍历每一行(Gnuplot行索引从0开始)。"MyData.csv" every ::i::i:仅读取当前循环对应的第i行数据。using (column(0)-1):column(int(column(0))):(column(0)-1):将列索引(从1开始)转换为x轴坐标(从0开始,若想x从1计数,直接改成column(0)即可)。column(int(column(0))):取当前列的数值作为y轴坐标,自动适配每行的动态列数。
title strcol(1):用该行第一列的字符串作为折线的图例标题。with linespoints:同时绘制折线和数据点,更直观展示数据变化。
内容的提问来源于stack exchange,提问作者STR4NG3R
相关产品推荐
相关产品推荐

