在正常情况下\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
\label
nodes near coords
point 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
从表中给出数据,但这次是数字数据。