shell - 通过 Shell 命令生成 Gnuplot 数据块
问题描述
我有一个相当昂贵的 shell 命令,它会生成一些应该被绘制的输出。输出包含多条曲线的信息,例如:
echo 1 2 3; echo 4 5 6; echo 7 8 9
它们应该使用如下命令绘制:
plot <something> using 1:2, \
<something> using 1:3
为了避免重复调用 shell 命令(因为它相当慢),我想将其结果存储在数据块中,但到目前为止我的试验没有奏效。这是我尝试过的:
output = system("echo 1 2 3; echo 4 5 6; echo 7 8 9")
set print $DATA
print output
unset print
现在我似乎有一个包含我想要的数据块,因为print $DATA
现在打印:
1 2 3
4 5 6
7 8 9
我希望后面的空行不是问题,但也许它表明有问题,我不知道。
当我现在尝试绘制这个时,plot $DATA using 1:2
我只得到三个预期点(1|2)、(4|5)和(7|8)中的第一个。
我觉得可能有一种更简单的方法可以实现我最初的目标,但到目前为止我还没有找到它。
解决方案
现在我似乎有一个包含我想要的数据块,因为
print $DATA
现在打印:1 2 3 4 5 6 7 8 9
不,$DATA
不包含您想要的。$DATA
应该是一个包含三个元素的数组:第一个元素是1 2 3
,第二个元素是4 5 6
,第三个元素是7 8 9
。相反, , 和 的组合会output = system("...")
生成set print $DATA
一个只有一个元素:print output
的数组,打印到数据块中不会将字符串拆分为单独的行。1 2 3\n4 5 6\n7 8 9
用 是看不到差异的print $DATA
。数据块的新数组元素以及\n
数组元素内的新数组元素都会生成换行符。
您可以使用该load '< XXXXX'
命令生成有用的数据块。从 gnuplot 文档中:
该
load
命令执行指定输入文件的每一行,就好像它是交互式输入的一样。...
在某些支持 popen 函数 (Unix) 的系统上,可以通过以“<”开头的文件名从管道中读取加载文件。
“XXXXX”可以是一系列生成必要的 gnuplot 命令的 shell 命令:
load '< echo "\$DATA << EOD" && echo 1 2 3; echo 4 5 6; echo 7 8 9 && echo "EOD"'
print $DATA
plot $DATA using 1:2 pt 5, $DATA using 1:3 pt 7
(灵感来自gnuplot:将数据文件 1:1 加载到数据块中)
推荐阅读
- python - np.where 不返回字符串列表中的任何索引
- python - 绘图未显示我的系列的确切值
- assembly - 有符号或无符号循环计数器
- django - Django 的 ForeignKey 实例错误异常
- javascript - 从 props (JS/React) 访问过滤后的对象值
- jquery-mobile - 如何从源代码构建 jquery-mobile?
- android - 更新 ViewModel 数据?
- python - 在 Python2.7 中无法连接字符串
- c - 编译一个函数以在其他机器上运行它而不解决地址依赖关系
- javascript - 你可以将一个 JavaScript 应用程序包装在一个 Java 容器中吗?