我想绘制一个带有gnuplot的图表,我的想法是我将有一个数据集,我将从左到右绘制表格,之后,绘制相同的数据乘以1.3或者从右到左的内容再一次绘制原始数据从左到右再次乘以0.7。
这是我从左到右的第一个绘图的工作代码,但我不知道如何绘制重绘二。变量DATA是数据文件。
LINES=$(wc -l <"$DATA")
YRANGE=$(sort -n "$DATA" | sed -n '1p;$p' | paste -d: -s)
FMT=$TMPDIR/%0${#LINES}d.png
for ((i=1;i<=LINES;i++))
do
{
cat <<-PLOT
set terminal png
set output "$(printf "$FMT" $i)"
plot [0:$LINES][$YRANGE] '-' with lines t ''
PLOT
head -n $i "$DATA"
} | gnuplot
done
你可以给我一些提示吗?非常感谢你
答案 0 :(得分:0)
以下代码仅代表我建议方法的大纲;我会留给你填写缺少的空白
我建议创建一个函数mkplot
,它将被调用3次,其中包含乘法因子,绘图方向(1 =从左到右; -1 =从右到左)的适当参数,以及输入文件名(仅如果您需要稍后重复使用不同文件的绘图例程)。 awk
用于进行乘法运算,以及正常和反向顺序的数据输出。您需要更改print
部分中的awk
语句,以打印所需的gnuplot
标题。
DATA=data
function mkplot {
local factor=$1
local dir=$2
local file=$3
awk '
# multiply each data point by factor
{ a[i++]= ($0 * '$factor') }
END{
# after all lines have been processed, output result
print "set terminal png"
print "add other gnuplot options here"
print "..."
print "plot \"-\""
# dump lines in reverse order if dir=-1
if ('$dir' == -1) {for (j=i-1;j>=0;j--) print a[j] }
# or in standard order if dir=1
else { for (j=0;j < i;j++) print a[j] }
}
' $file | gnuplot # pipe the awk output to gnuplot
}
# Call the plot routine for 3 plots with different factors and directions
mkplot 1 1 $DATA
mkplot 1.3 -1 $DATA
mkplot 0.7 1 $DATA