Mit zwei Argumenten in der sprintf-Funktion in gnuplot

Ich habe versucht, graph mehrere Dateien auf dem gleichen gnuplot graph mit sprintf zu Lesen in den Dateinamen. Ich kann Lesen in einem argument o.k. wenn ich Schreibe:

filename(n) = sprintf("oi04_saxs_%05d_ave_div_sub.dat", n)
plot for [i=1:10] filename(i) u 1:2

dann mein graph ist o.k und ich bekomme alle Dateien mit diesem argument aufgetragen auf der gleichen Kurve. Aber ich habe eine Zeichenfolge von Zeichen, die änderungen nahe dem Ende meiner mit dem Namen und wenn ich versuche zu reflektieren, in

filename(n,m) = sprintf("oi04_saxs_%05d_0001_%04s_ave_div_sub.dat",n,m)

plot for [i=1:10] filename(i,m) u 1:2 

Bekomme ich folgende Fehlermeldung: „undefined variable „m“. Ich habe versucht, das entfernen der Schleife und nur mit

plot for filename(m)

und das Ergebnis ist die gleiche Fehlermeldung. Hilfe zu verstehen, was falsch läuft und wie man es beheben würde sehr geschätzt 🙂

Dies ist meine vollständige Skript:

unset multiplot
reset

set termoption enhanced
set encoding utf8

set term pdf size 18cm,18cm font 'Arial'

set pointsize 0.25

set output 'StoppedFlowResults.pdf'

set logscale

set xlabel '{/:Italic r} /[Q]'
set ylabel '{/:Italic Intensity}'

filename(n) = sprintf("./Result_curve-%d.txt/estimate.d", n)

myColorGradient(n) = sprintf("#%02x00%02x", 256-(n-1)*8-1, (n-1)*8)

set key off

set multiplot layout 2,1

filename(n,m) = sprintf("oi04_saxs_%05d_0001_%04s_ave_div_sub.dat",n,m);

plot for [i=1:10] filename(i,m) u 1:2 not

unset multiplot

set output
  • Wie die Fehlermeldung sagt: Sie definieren nicht m überall, bevor Sie es verwenden, mit plot for [i=1:10] filename(i,m).
  • aber nicht, definiere ich es, wenn ich Schreibe mit dem Namen(n,m)=sprintf(„“,n,m)? ist das nicht die Definition aus der Liste der möglichen Dateinamen?
  • Nein, da hast du die definition einer Funktion, also die zweite Funktion parameter zur Verfügung, wie m innerhalb der Funktion Körper, aber nur dort. Ist es ein anderes Problem, wenn Sie rufen Sie Ihren filename Funktion. Und jetzt, da ich es sehe, haben Sie zwei verschiedene filename Definitionen.
  • Ok… das ist hilfreich, aber wie löse ich das problem? Ich habe gerade versucht mit dem code, indem Sie die zweite definition, so dass es liest nur in einer Variablen, so: filename(n,m)=sprintf("", n,m) br/ plot for [i=1:10] filename(i) u 1:2 not
InformationsquelleAutor MoreTeaPlease | 2016-01-07



One Reply
  1. 0

    basierend auf help for haben, können Sie die geschachtelte Iterationen z.B.:

    plot for [i=1:3] for [j=1:3] sin(x*i)+cos(x*j)
    

    In Ihrem Fall können Sie mischen diese mit den Saiten (Sie haben noch zu definieren string mögliche Werte) mit so etwas wie:

    plot for [i=1:3] for [m in "A B C D"] filename(i,m) u 1:2 not
    
    • also muss ich definieren mögliche string-Werte? Ich hatte gehofft, auf dieser Problemumgehung….
    • Naja, wie @Christoph schon oben erwähnt, muss man sagen, gnuplot das Muster, um diese Dateien zu finden. Entweder Sie haben eine Liste von strings, entweder Sie passen in ls wie stylle mit einem Muster, wie in diesem post

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.