Skip to content
Advertisement

Script to plot multiple graphs in gnuplot

I try to write a script which will be executed by the shell to use several txt-files in a directory to plot multiple lines in a graph with gnuplot. So if I type in the command for one picture, the results are as imagined. Here you can see the command:

plot "test2.txt" using 2:1 w filledcurves lc "red" title "Red Channel",
"text2.txt" using 3:1 w filledcurves lc "green" title "Green Channel",
"text2.txt" using 4:1 w filledcurves lc "blue" title "Blue Channel"

Now my Script looks like this:

[...] for i in 'ls -1 *.txt'
do
cat $1|
tr ":()" " " |
gnuplot -p -e 'set terminal jpeg; set output "'$1'.jpeg";plot "/dev/stdin" using 2:1 w filledcurves lc "red" title "Red Channel", "/dev/stdin" using 3:1 w filledcurves lc "green" title "Green Channel", "/dev/stdin" using 4:1 w filledcurves lc "blue" title "Blue Channel"'
done

The script edits every txt-file and creates a jpg but only with the first graph, the “Red Channel”. I also tried it alternativly with a seperation like , between the different lines but it didn’t work. Also tried to use just '' instead of “/dev/stdin” but nothing happend then at all.

Advertisement

Answer

What you are trying to do won’t work because your first plot will consume the entire stdin. There are also other problems. I am not at a computer to test, but I think you’ll be closer with:

for i in *.txt ; do
   tr ‘:()’ ‘   ‘ < “$i” > /tmp/a.txt
   gnuplot -pe ‘set terminal jpeg; set output “/tmp/a.jpg”; plot “/tmp/a.txt” ... ‘
   mv /tmp/a.jpg “${i}.jpeg”
done
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement