Ich versuche, mehrere Codezeilen mit Gnuplot zu plotten \addplot gnuplot
, aber das funktioniert nicht und es wird keine Plotausgabe erstellt. Ist es möglich, eine Datei mit Code aufzurufen oder mehrere Zeilen mit Funktionsdeklarationen zu haben?
Danke!
PS: Ein einfaches Online-Gnuplot funktioniert (z. B. plot [-10:100] real(sin(x)**besj0(x))), shell-escape
muss aber ebenfalls aktiviert werden.
Beispiel:
\documentclass{standalone}
\usepackage{tikz,pgfplots}
\usepackage{amsmath}
\usepackage[per=slash, decimalsymbol=comma, loctolang={DE:ngerman,UK:english},]{siunitx}
\begin{document}
\usepgfplotslibrary{units}
\begin{tikzpicture}
\begin{axis}[width=0.95\linewidth,
height=7.5cm,
legend pos=north east,
grid=major,
grid style={dashed,gray!30},
xlabel=Frequency in \si{\hertz},
ylabel=Impedance in \si{\ohm},
enlarge x limits=false,
xmode=log,
xmax=10^9 ]
\addplot gnuplot[raw gnuplot,mark=none,color=cyan] {
j=sqrt(-1)
zc(f,c) = 1/(j*2*pi*f*c)
zl(f,l) = j*2*pi*f*l
zpar(z1,z2) = z1*z2/(z1+z2)
zmodel(f,r,c) = zpar(r, zc(f,c))
azmodel(f) = abs(zmodel(f,R1,C1))
R1= 5.6e6
C1= 1e-9
plot azmodel(x)
};
% plot [-10:100] real(sin(x)**besj0(x))
\end{axis}
\end{tikzpicture}<>
\end{document}
Antwort1
Sie müssen ;
am Ende jeder Gnuplot-Zeile ein hinzufügen.
Grund: pgfplots
schreibt eine Datei yourfile.pgf-plot.gnuplot
, die dann an gnuplot weitergegeben wird. Darin steht dein Code in einer Zeile. Gnuplot kann daher einzelne Zuweisungen nicht unterscheiden. Mit ;
am Ende der Zeilen lässt sich das beheben und gnuplot erzeugt die benötigte Tabelle ( yourfile.pgf-plot.table
).
\documentclass{standalone}
\usepackage{tikz,pgfplots}
\usepackage{amsmath}
\usepackage[per=slash, decimalsymbol=comma, loctolang={DE:ngerman,UK:english},]{siunitx}
\begin{document}
\usepgfplotslibrary{units}
\begin{tikzpicture}
\begin{axis}[width=0.95\linewidth,
height=7.5cm,
legend pos=north east,
grid=major,
grid style={dashed,gray!30},
xlabel=Frequency in \si{\hertz},
ylabel=Impedance in \si{\ohm},
enlarge x limits=false,
xmode=log,
xmax=10^9 ]
\addplot gnuplot[raw gnuplot,mark=none,color=cyan] {
% add semicolons here
j=sqrt(-1);
zc(f,c) = 1/(j*2*pi*f*c);
zl(f,l) = j*2*pi*f*l;
zpar(z1,z2) = z1*z2/(z1+z2);
zmodel(f,r,c) = zpar(r, zc(f,c));
azmodel(f) = abs(zmodel(f,R1,C1));
R1= 5.6e6;
C1= 1e-9;
plot azmodel(x);
};
% plot [-10:100] real(sin(x)**besj0(x))
\end{axis}
\end{tikzpicture}<>
\end{document}
Haftungsausschluss: Ich musste gnuplot manuell ausführen, da etwas mit meiner Installation nicht stimmte. Aber mit den Semikolons hat es funktioniert, ohne sie ging es nicht.
Bearbeiten: Wenn Sie gnuplot von der Befehlszeile aus ausführen, wird Ihnen dies angezeigt und ^
die zweite Zeile verweist auf die Stelle des Fehlers:
user@mashine:~/path/to/file> gnuplot yourfile.pgf-plot.gnuplot
set format "%.7e";; j=sqrt(-1) zc(f,c) = 1/(j*2*pi*f*c) zl(f,l) = j*2*pi*f*l zpar(z1,z2) = z1*z2/(z1+z2) zmodel(f,r,c) = zpar(r, zc(f,c)) azmodel(f) = abs(zmodel(f,R1,C1)) R1= 5.6e6 C1= 1e-9 plot azmodel(x)
^
"yourfile.pgf-plot.gnuplot", line 2: ';' expected