如何在gnuplot中使用数据库(或bash数组)值作为行属性?

时间:2013-11-12 13:37:10

标签: bash gnuplot

我有一个类似于:

的数据库文件
aaa bb ccc 2 3.34534 kkk 3 4.5099 34%
rr wie fff 4 4.59050 asd 6 5.0983 1.345%

我需要绘制从第5列的'y'值开始的范围(即3.34534),直到第8列的值。或者假设,y = 3.34534行,第一行的线宽为4.5099-3.34534。或者,第一行的y = 3.34534和y = 4.5099之间的某种填充曲线。对于所有行,必须在第5列和第8列的值之间填充曲线。问题是,如何访问这些值并将它们输入到gnuplot中。一个shell脚本可能吗? (到目前为止,我已设法将值保存到数组x()和y():第5行中的值由$ {x [0]}访问,第8列中的值为$ {y [0]现在的问题是如何通过EOF>>)将数组中的值输入到gnuplot语法中。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果你想在bash脚本中将所有内容放在一起,你可以先定义一个包含所有gnuplot代码的变量(参见例如BASH: Keeping formatting but substituting variables):

read -r -d '' GNUPLOT_SCRIPT <<EOF
set xrange [0:1];
plot x
EOF

注意,对于该构造,gnuplot代码的每一行都必须以;终止。

对于绘图,我会使用boxxyerrorbars绘图样式,它在具有给定宽度和高度的点处绘制框。在gnuplot using语句中,第一个和第二个值是 center 框的xy值,第三个和第四个值为框的宽度和高度。

您没有对x - 值进行任何说明,因此我选择xrange来自01

假设您“数据库”在字符串中,bash脚本如下所示:

#!/bin/bash

database="aaa bb ccc 2 3.34534 kkk 3 4.5099 34%
rr wie fff 4 4.59050 asd 6 5.0983 1.345%"

read -r -d '' GNUPLOT_SCRIPT <<EOF
set xrange[0:1];
set style fill solid 1.0;
set style data boxxyerrorbars;
unset key;
plot '-' using (0.5):(0.5*(column(5)+column(8))):(0.5):(abs(0.5*(column(5) - column(8))))
EOF

echo "$database" | gnuplot -persist -e "$GNUPLOT_SCRIPT"

如果要将图存储在文件中,则不需要-persist选项。

答案 1 :(得分:0)

为了回答问题的其他部分,我想出了如何从file.dat中做到这一点。假设数据库不在字符串中但在file.dat中,结果是作为.png图像。

gnuplot << EOF
set terminal png
set output "niceplot.png"
plot "file.dat" using (0.5):(0.5*(column(5)+column(9))):(0.5):(abs(0.5*(column(5) - column(9)))) with boxxy fs solid 1 noborder lc rgb "red" title "Range"
EOF

其中,fs solid 1 noborder lc rgb“red”title“Range”,是gnuplot的一些造型。 感谢Christoph建议错误框。