Gnuplot - 从右到左的情节

时间:2016-04-05 21:12:18

标签: bash plot gnuplot

我想绘制一个带有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
你可以给我一些提示吗?非常感谢你

1 个答案:

答案 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