更新

更新

我有以下输入文件(sample.txt):

A 1 2
B 23 2
C 2 34
D 12 22
E 23 3
F 34 12

我想创建一个散点图,其中第二列是 x 轴,第三列是 y 轴,第一列是每个点的标签。

然而,我想仅有的列表 L = [B,D,E] 中存在的标签点

该列表应该在源代码中定义(即不在文件中),可以更改,并且应反映在图中。

我在 PGF 图上很难完成此操作。有什么想法吗?

这是我迄今为止的尝试

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}

\begin{tikzpicture}
\begin{axis}
    \addplot+ [mark = x, 
        only marks,
        visualization depends on={value \thisrowno{0}}
    ] table[x index = 1, y index = 2] {annot_no_align.out};

\end{axis}
\end{tikzpicture}
\end{document}

注意:您可能已经知道,我是 PGFPlots 的初学者。

答案1

node near coords因此,这是和一些练习的结合if

\pgfutil@in@可以在 中找到 的定义pgfutil-common.tex。也可以查阅 LaTeX\includeonly和 BEAMER 的\includeonlyframes

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}

\makeatletter
\def\labelonly{BDF}
\def\labelcheck#1{
    \edef\pgfmarshal{\noexpand\pgfutil@in@{#1}{\labelonly}}
    \pgfmarshal
    \ifpgfutil@in@[#1]\fi
}
\makeatother

\begin{tikzpicture}
\begin{axis}
    \addplot[
        mark=*,
        only marks,
        point meta=explicit symbolic,
        nodes near coords={
            \labelcheck{\pgfplotspointmeta}
        }
    ]
        table[header=false,meta index=0,x index=1,y index=2]{
            A 1 2
            B 23 2
            C 2 34
            D 12 22
            E 23 3
            F 34 12
        };
\end{axis}
\end{tikzpicture}
\makeatletter

\end{document}

更新

如果您更喜欢 CSV,这里有一个更好的解决方案。我正在使用本机\pgfkeys功能,因此您可能已经知道什么是危险的,什么不是。(例如逗号是危险的。)

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}

\pgfkeys{
    /prepare label/.style={
        /print label/\detokenize{#1}/.code={\ttfamily\detokenize{#1}}
    },
    /prepare label/.list={^_^,@_@,T_T}
}
\begin{tikzpicture}
\begin{axis}
    \addplot[
        mark=*,
        only marks,
        point meta=explicit symbolic,
        nodes near coords={
            \pgfkeys{/print label/\pgfplotspointmeta/.try}
        }
    ]
        table[header=false,meta index=0,x index=1,y index=2]{
            ^_^   1  2
            >_<  23  2
            @_@   2 34
            Q_Q  23  3
            T_T  12 22
            =_=  34 12
        };
\end{axis}
\end{tikzpicture}

\end{document}

相关内容