2016-09-19 5 views
1

Ich versuche, ein Diagramm zu plotten und speichern Sie es als Datei mit gnuplot. Ich habe verschiedene Textdateien. Die Anzahl der Textdateien ist nicht sicher. Jede Textdatei enthält zwei Spalten. Die Textdatei behandelt das lineare Absorptionsspektrum. Die erste Spalte ist die Frequenz und die zweite ist die Intensität. Ich möchte den Unterschied zwischen den Spektren vergleichen, indem Sie sie in einem einzigen Diagramm für alle Dateien aufzeichnen. Ich benutze dieses Skript, um das zu tun. Shell-Skript von gnuplot: über verschiedene Eingabedateien in einem einzigen Diagramm zum Vergleichen der Zeilen

#!/bin/bash 

# plot linear absorption spectrum (las) 
# Usage: 
# ./lasplot.sh a.ods b.ods c.ods .. 

j=1 
for i in $* 
do 
    echo "Normalization $i" 
    maxle=`cat $i|tr -s "," " "|awk 'BEGIN{max=0} {if($2>max) max=$2}END{print max}'` 
    echo " The max value is $maxle" 
    max[$j]=$maxle 
    filename[$j]=$i 
    ((j=$j + 1)) 
done 
num=$# 
echo ${filename[*]} 
echo $num 

read -p "Please select set data range (1) or auto set(2): " setrange 
case $setrange in 
1) 
    read -p "set min x range: " minx 
    read -p "set max x range: " maxx 
    ;; 
esac 

# call gnuplot to plot the 1D map 
gnuplot << EOF 
set datafile separator "," 
set title 'Linear Absorption Spectra' 
set xlabel '{/Symbol w} (cm^{-1})' 
set ylabel 'Intensity (a.u.)' 

#set data range 
if (${setrange}==1){ 
set xrange [$minx:$maxx] 
set yrange [0:1.1] 
} else { 
#set xrange [0:50] 
#set yrange [0:50] 
} 

set size 1,1 
set key right top 

plot "${filename[1]}" using 1:(column(2)/${max[1]}) with lines linewidth 2 ,\ 
"${filename[2]}" using 1:(column(2)/${max[2]}) with points pointtype 21 

pause mouse keypress "Type a letter" 

set term pdfcairo font "arial,12" 
set term pdfcairo enh 
set term pdfcairo size 6,5 
set output "las.pdf" 
plot "${filename[1]}" using 1:(column(2)/${max[1]}) with lines linewidth 2 ,\ 
"${filename[2]}" using 1:(column(2)/${max[2]}) with points pointtype 21 

EOF 

nur Mein Skript zwei Textdateien zeichnen können? Wie kann es geändert werden, um mehrere Eingabedateien zu plotten?

Antwort

0

könnten Sie den Plotbefehl in Ihrem Skript vorbereiten, bevor gnuplot aufrufen, speichern Sie es in eine Variable und dann in der gnuplot Eingang Wiederverwendung (auch so Vermeidung von Wiederholungen):

plotCmd="plot" 
for((i=1;i<=${num};i++)) 
do 
    if [ $i -eq 1 ]; then 
     join=" " 
    else 
     join=", " 
    fi 
    plotCmd="${plotCmd}${join}\"${filename[$i]}\" using 1:2 with lines" 
done 

und dann:

gnuplot << EOF 

... some other stuff ... 
${plotCmd} 

EOF 
Verwandte Themen