GNUPlot 4.6不识别$DATA << EOD 求跨版本兼容内嵌数据写法
兼容GNUPlot 4.6与5.2版本的内嵌数据解决方案
报错根因
$DATA << EOD格式的命名内嵌数据块是GNUPlot 5.0及以上版本才新增的特性,4.6版本无对应语法支持,因此会识别该行命令为无效指令。
兼容实现方案(无需单独存储数据文件)
方案1:单次使用数据采用'-'伪文件语法
该语法为两个版本原生支持,直接在绘图命令后嵌入数据即可,示例:
# 直接在绘图语句后接数据 plot '-' using 1:2 with points 0.3 -0.1599804163 53 2 0.1051269323 84 0.4 0.0227271412 87 0.4 0.1050702557 89 # 结束标记,不可省略 e
如果需要同时绘制多组内嵌数据,每组数据结束后都追加e即可。
方案2:多次复用数据采用宏存储写法
如果同一份数据需要被多个绘图命令调用,可以开启宏支持后将数据存入宏变量:
# 开启宏支持 set macro # 数据写入宏变量,行末加反斜杠实现换行 ALL_DATA="0.3 -0.1599804163 53 \ 2 0.1051269323 84 \ 0.4 0.0227271412 87 \ 0.4 0.1050702557 89" # 第一次调用数据绘图 print ALL_DATA | plot '-' using 1:2 with points # 第二次调用数据绘制其他维度 print ALL_DATA | plot '-' using 1:3 with lines
方案3:超大量数据采用Shell包裹写法
如果数据量过万行,宏变量可能存在长度限制,此时可以用Shell脚本包裹gnuplot逻辑,通过管道传递数据无需生成独立文件:
#!/bin/bash cat << EOF | gnuplot # 这里写所有gnuplot配置逻辑 set terminal pngcairo set output 'test.png' # 直接读取管道传入的内嵌数据 plot '-' using 1:2 with points 0.3 -0.1599804163 53 2 0.1051269323 84 0.4 0.0227271412 87 0.4 0.1050702557 89 e EOF
内容的提问来源于stack exchange,提问作者con
相关产品推荐
相关产品推荐

