我在使用 latex 实现 gnuplot 代码时遇到了问题。我使用 PdfLatex 并带上参数“--enable-write18”。
以下代码应该适用于第一个注释掉的行%plot 'data.dat' u 1:2;
,但不能适用于%plot 'data.dat' u 1:(f(\$2))
。建议的解决方案plot 'data.dat' u 1:(f(\string$2));
无法处理nan
中的值data.dat
。我该如何解决这个问题?是否有机会从外部文件执行gnuplot
代码TeX
?也许这可以解决问题,我可以使用$
而不是\$
或\string$
?
它应该看起来像第二张图片。
\documentclass[11pt]{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{verbatim}
\begin{filecontents*}{data.dat}
time w1 e1 w2 e2
1 3019 40 nan nan
2 3045 34 nan nan
3 3100 50 3104 24
4 3500 13 3498 90
5 3800 90 3803 12
6 NaN NaN 3980 43
7 NaN NaN 3985 80
8 3810 10 3988 34
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
compat=newest,
y tick label style={/pgf/number format/1000 sep=},
ymin=2900,
ymax=4400]
\addplot gnuplot
[raw gnuplot,id=bal,mark=none,very thick]{
set datafile missing 'NaN';
set xrange [1:8];
set yrange [3000:4500];
f(x)=x;
plot 'data.dat' u 1:(f(\string$2));
%plot 'data.dat' u 1:2;
%plot 'data.dat' u 1:(f(\$2))
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我不确定pcygni.txt
文件是什么,而且我没有得到任何输出,但你的主要问题是\$
选择字体和排版的命令,$
但是(我认为)你想将一个传递$
给 gnuplot,所以这是错误的引用。
尽管这可能不是您想要的情节,但运行起来没有错误。
\documentclass[11pt]{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{verbatim}
\begin{filecontents*}{data.dat}
time w1 e1 w2 e2
1 3019 40 nan nan
2 3045 34 nan nan
3 3100 50 3104 24
4 3500 13 3498 90
5 3800 90 3803 12
6 nan nan 3980 43
7 nan nan 3985 80
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
compat=newest,
y tick label style={/pgf/number format/1000 sep=},
ymin=2900,
ymax=4400]
\addplot gnuplot
[raw gnuplot,id=bal,mark=none,very thick]{
set xrange [1:8];
set yrange [3000:4500];
f(x)=3600;
plot 'data.dat' u 1:(f(\string$2));
plot 'data.dat' u 1:2
};
\end{axis}
\end{tikzpicture}
\end{document}