\addplot + \pgfplotsretval = pgfplots 1.14 和 1.15 中的奇怪错误

\addplot + \pgfplotsretval = pgfplots 1.14 和 1.15 中的奇怪错误

几年前我使用过以下代码,效果很好。我想创建一个带有单个数据点的图,其中一个坐标使用\pgfplotstablegetelem和从表中获取\pgfplotsretval。但是,现在在pgfplots版本 1.14 和 1.15 中,此代码无法编译并出现奇怪的错误。在某些情况下,它会抱怨无法将“-5:5”解析为浮点,即使我在代码或数据中的任何地方都没有这样的文本。

我究竟做错了什么?

\documentclass{article}

\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat = 1.15}

\begin{document}

\pgfplotstableread
{
    x   y 
    1   10
    2   20
    3   30
}\data    

\pgfplotstablegetelem{0}{y}\of\data
Value is \pgfplotsretval

\begin{tikzpicture}
\begin{axis}[xbar]
\pgfplotstablegetelem{0}{y}\of\data
\addplot coordinates {(\pgfplotsretval,1)};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

下面显示了三种可能的解决方法。第一种与您的代码非常相似,但\pgfplotsretval我没有直接使用,而是将其保存在宏中,然后使用该宏。

第二,我直接读取表格,并使用ifthenelse/x expry expr使用特定的坐标。

在第三个中我使用x filter,类似于手册中的一个示例(第 4.22 节跳过或更改坐标 – 过滤器)。

这三个输出都相同:

单条柱状图

\documentclass{article}

\usepackage{pgfplotstable}
\pgfplotsset{compat=1.15}

\begin{document}

\pgfplotstableread
{
    x   y 
    1   10
    2   20
    3   30
}\data    


\begin{tikzpicture}
\begin{axis}[xbar]
\pgfplotstablegetelem{0}{y}\of\data
\pgfmathsetmacro\tmpval{\pgfplotsretval}
\addplot coordinates {(\tmpval,1)};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[xbar]
\addplot table[
    x expr={ifthenelse(\coordindex==0,\thisrow{y},nan)},
    y expr={ifthenelse(\coordindex==0,\thisrow{x},nan)}
    ]{\data};
\end{axis}
\end{tikzpicture}


\begin{tikzpicture}
\begin{axis}[xbar]
\addplot +[
  x filter/.code={
    \ifnum \coordindex>0
       \def\pgfmathresult{}
    \fi
   }
 ]
 table[x=y,y=x]{\data};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容