pgfplot 中的化学式呈现错误---标签重叠

pgfplot 中的化学式呈现错误---标签重叠

在正常情况下\ch{AB_2},会呈现为$AB_2$,但不在 内pgfplot。我收到错误消息Package PGF Math Error: Could not parse input '' as a floating point number,标签重叠。是否有可能使这两个包成为朋友。我仍在学习PGF,因此这个问题很幼稚。我将不胜感激您的任何意见。

\documentclass{standalone}
\usepackage{pgfplots,chemformula,filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.dat}
    N   system     A1          C2       Exp
    1     CH2     -0.70      -0.82     -0.53 
    2     NH3     -0.97      -1.58      0.00 
    3    H2HO     -0.96      -1.53     -0.06 
    4    SiH2      0.11      -0.92     -0.60 
\end{filecontents}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xlabel=eV,ylabel=eV]
        \addplot[
                visualization depends on={value \thisrow{system} \as \label},           
                scatter, only marks,
                scatter src=explicit symbolic,
                nodes near coords*={\ch{\label}}]
         table[x=Exp,y=A1]{data.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

答案1

这是一个纯粹的 pgfplots 问题。你把point meta(的同义词scatter src)和混合在一起了visualization depends on。但是point meta用于以标准方式传递额外数据,而visualization depends on用于提供额外数据没有干扰point meta,以及如何使用它完全取决于你。

解决方案 1将标签传递为point meta(此处为scatter src):

\documentclass{standalone}
\usepackage{pgfplots,chemformula,filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.dat}
    N   system     A1          C2       Exp
    1     CH2     -0.70      -0.82     -0.53 
    2     NH3     -0.97      -1.58      0.00 
    3    H2HO     -0.96      -1.53     -0.06 
    4    SiH2      0.11      -0.92     -0.60 
\end{filecontents}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xlabel=eV,ylabel=eV]
        \addplot[
                scatter, only marks,
                scatter src=explicit symbolic,
                nodes near coords={\expandafter\ch\expandafter{\pgfplotspointmeta}},
                ]
         table[x=Exp,y=A1,meta=system]{data.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

如您所见,我使用meta键来指定point meta列。如果公式文本在宏中(如这里),则\expandafter显然需要使用技巧来排版化学式。还请注意,在 : 之后没有星号,否则 pgfplots 将对期望在 中输入数值的节点应用默认样式。\ch\labelnodes near coordspoint meta

解决方案 2传递标签visualization depends on

\documentclass{standalone}
\usepackage{pgfplots,chemformula,filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.dat}
    N   system     A1          C2       Exp
    1     CH2     -0.70      -0.82     -0.53
    2     NH3     -0.97      -1.58      0.00
    3    H2HO     -0.96      -1.53     -0.06
    4    SiH2      0.11      -0.92     -0.60
\end{filecontents}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xlabel=eV,ylabel=eV]
        \addplot[
                scatter, only marks,
                nodes near coords={\expandafter\ch\expandafter{\label}},
                visualization depends on={value \thisrow{system} \as \label},           
                ]
         table[x=Exp,y=A1]{data.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

请注意,我在这里没有使用scatter src(即没有point meta)。在这个解决方案和前一个解决方案中,文本标签都有一些重叠...

解决方案 3用于visualization depends on提供标签文本 point meta设置标签位置:

\documentclass{standalone}
\usepackage{pgfplots,chemformula,filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.dat}
    N   system     A1          C2       Exp    Position
    1     CH2     -0.70      -0.82     -0.53   1
    2     NH3     -0.97      -1.58      0.00   1
    3    H2HO     -0.96      -1.53     -0.06   -1
    4    SiH2      0.11      -0.92     -0.60   -1
\end{filecontents}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xlabel=eV,ylabel=eV]
        \addplot[
                scatter, only marks,
                scatter src=explicit,
                nodes near coords align=vertical,
                nodes near coords={\expandafter\ch\expandafter{\label}},
                visualization depends on={value \thisrow{system} \as \label},           
                ]
         table[x=Exp,y=A1,meta=Position]{data.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

我添加了一个数据列,其值与键所期望的值一致nodes near coords align=vertical。请注意使用scatter src=explicit:我们point meta从表中给出数据,但这次是数字数据。

相关内容