我昨天发现了这个简单漂亮的代码:
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{pgfplots}
\pagestyle{empty}
\begin{document}
%\pgfplotstabletypeset{data.dat}
\vspace{1cm}
\begin{tikzpicture}
\begin{axis}[
xlabel=Q Series,
ylabel=P Values]
\addplot table [y=P, x=$Q_A$]{data.dat};
\addlegendentry{$Q_A$ series}
\addplot table [y=P, x=$Q_B$]{data.dat};
\addlegendentry{$Q_B$ series}
\addplot table [y=P, x=$Q_D$]{data.dat};
\addlegendentry{$Q_D$ series}
\end{axis}
\end{tikzpicture}
\end{document}
它与外部文件配合得很好
P $Q_A$ $Q_B$ $Q_D$
10 5 7 12
8 8 10 18
6 12 16 28
但是,如果文件中有更复杂的数字,例如
P $Q_A$ $Q_B$ $Q_D$
10 14.2*10^2 7 12
8 8 10 18
6 12 16 28
代码崩溃。
我该如何调整代码或数据才能工作?
提前谢谢
答案1
您可以*10^
替换e
P $Q_A$ $Q_B$ $Q_D$
10 14.2e2 7 12
8 8 10 18
6 12 16 28
答案2
您可以在宏中加载数据,然后预处理数据。我在这里假设您的值是\fpeval
expl3/xfp 可以处理的格式(但您的示例值与其他值相比相当大,因此图看起来很奇怪):
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{pgfplots,xfp}
\pagestyle{empty}
\begin{document}
\pgfplotstableread{data.dat}{\data}
\pgfplotstablecreatecol[create col/expr={\fpeval{\thisrow{$Q_A$}}}]{$Q_A$}\data
\vspace{1cm}
\begin{tikzpicture}
\begin{axis}[
xlabel=Q Series,
ylabel=P Values]
\addplot table [y=P, x=$Q_A$]{\data};
\addlegendentry{$Q_A$ series}
\addplot table [y=P, x=$Q_B$]{\data};
\addlegendentry{$Q_B$ series}
\addplot table [y=P, x=$Q_D$]{\data};
\addlegendentry{$Q_D$ series}
\end{axis}
\end{tikzpicture}
\end{document}
答案3
你只需要告诉 pgfplots 这些是表达式。也就是说,
\addplot table [y=P, x=$Q_A$]{data.dat};
你只需要
\addplot table [y=P, x expr=\thisrow{$Q_A$}]{data.dat};
梅威瑟:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
P $Q_A$ $Q_B$ $Q_D$
10 14.2*10^2 7 12
8 8 10 18
6 12 16 28
\end{filecontents*}
%\usepackage{pgfplotstable}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\pagestyle{empty}
\begin{document}
%\pgfplotstabletypeset{data.dat}
\vspace{1cm}
\begin{tikzpicture}
\begin{axis}[
xlabel=Q Series,
ylabel=P Values]
\addplot table [y=P, x expr=\thisrow{$Q_A$}]{data.dat};
\addlegendentry{$Q_A$ series}
\addplot table [y=P, x expr=\thisrow{$Q_B$}]{data.dat};
\addlegendentry{$Q_B$ series}
\addplot table [y=P, x expr=\thisrow{$Q_D$}]{data.dat};
\addlegendentry{$Q_D$ series}
\end{axis}
\end{tikzpicture}
\end{document}