Usando código gnuplot com múltiplas linhas de código em LaTeX

Usando código gnuplot com múltiplas linhas de código em LaTeX

Estou tentando usar várias linhas de código para serem plotadas com gnuplot \addplot gnuplot, mas isso não funciona e nenhuma saída de plotagem é criada. É possível chamar um arquivo com código ou ter múltiplas linhas com declarações de funções?

Obrigado!

PS: Um simples gnuplot on-line funciona (por exemplo, plot [-10:100] real(sin(x)**besj0(x))), também shell-escapedeve estar habilitado.

Exemplo:

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

Responder1

Você deve adicionar um ;ao final de cada linha do gnuplot.

Motivo: pgfplotsgrava um arquivo yourfile.pgf-plot.gnuplotque é então alimentado no gnuplot. Seu código está escrito em uma linha. Portanto, o Gnuplot não pode distinguir atribuições individuais. Com ;no final das linhas, isso pode ser corrigido e o gnuplot produz a tabela necessária ( 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}

Isenção de responsabilidade: tive que executar o gnuplot manualmente porque algo está errado com minha instalação. Mas funcionou com ponto e vírgula e não funcionou sem eles.

Editar: se você executar o gnuplot a partir da linha de comando, ele informará isso e ^na segunda linha apontará para o local do erro:

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

informação relacionada