几年前我使用过以下代码,效果很好。我想创建一个带有单个数据点的图,其中一个坐标使用\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 expr
仅y 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}