LaTeX で複数のコード行を含む gnuplot コードを使用する

LaTeX で複数のコード行を含む gnuplot コードを使用する

gnuplot を使用して複数行のコードをプロットしようとしています\addplot gnuplotが、うまくいかず、プロット出力は作成されません。コードを含むファイルを呼び出したり、関数宣言を含む複数行を使用したりできますか?

ありがとう!

PS: シンプルなオンライン gnuplot も機能します (例: plot [-10:100] real(sin(x)**besj0(x)))。これもshell-escape有効にする必要があります。

例:

\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}

答え1

;各 gnuplot 行の末尾に を追加する必要があります。

理由: gnuplot に送られるpgfplotsファイルを書き込みますyourfile.pgf-plot.gnuplot。コードは 1 行に記述されます。そのため、gnuplot は個々の割り当てを区別できません。;行末に を付けると、これを修正でき、gnuplot は必要なテーブル ( 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}

免責事項: インストールに問題があったため、gnuplot を手動で実行する必要がありました。ただし、セミコロンがあると動作しましたが、セミコロンがないと動作しませんでした。

編集: コマンドラインから gnuplot を実行すると、次のメッセージが表示され、^2 行目の はエラーの場所を示します。

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

関連情報