我有一个带误差线的垂直条形图。我想在误差线的正上方或正下方(结果显著的位置)放置一颗星号。
我使用提供的非常巧妙的技巧实现了这一点这个答案。
这是一个简单的例子:
它确实有效,但我的问题是,与原始问题,我的 x 坐标是符号的。这会导致如下错误消息:
! Package pgfplots Error: Sorry, the input coordinate `0' has not been defined
with 'symbolic x coords={α,β,γ,δ}... Maybe it has been misspelled?.
我的真实情节比这多得多的内容,但这里是生成上述示例的代码:
\documentclass{article}
\usepackage[no-math]{fontspec}
\setmainfont{Linux Libertine O}
\usepackage[libertine]{newtxmath}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data1.dat}
X Y Y_error Label
α -0.06 0.33 \\
β -0.51 0.19 $\star$
γ -0.80 0.19 $\star$
δ 0.54 0.27 \\
\end{filecontents}
\begin{filecontents}{data2.dat}
X Y Y_error Label
α -0.04 0.33 \\
β -0.85 0.17 $\star$
γ 0.89 0.15 $\star$
δ 0.36 0.31 $\star$ \\
\end{filecontents}
\begin{figure}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=0.15,
symbolic x coords={α,β,γ,δ},
xtick=data,
ybar,
point meta=explicit symbolic,
nodes near coords,
nodes near coords align={vertical},
visualization depends on=abs(y)/y*(0.1+\thisrow{Y_error}) \as \myshift,
every node near coord/.append style={
anchor=center,shift={(axis direction cs:0,\myshift)},font={\bfseries},
}]
\addplot+[error bars/.cd, y dir=both, y explicit]
table[x=X, y=Y, y error=Y_error, meta=Label] {data1.dat};
\addplot+[error bars/.cd, y dir=both, y explicit]
table[x=X, y=Y, y error=Y_error, meta=Label] {data2.dat};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
问题的核心似乎在于shift={(axis direction cs:0,\myshift)}
。0
对于符号坐标,x 分量的 是没有意义的,但我还没有找到表达“独立 y 移位”的方法。我是否遗漏了某些显而易见的东西?
这不是一个问题,但是我收到了大量的错误消息,这阻止了我将这些情节外部化。
答案1
当只需要一个组件时,transformdirectiony()
应使用 pgf 数学函数。因此,您可以替换
shift={(axis direction cs:0,\myshift)}
和
shift={(0,transformdirectiony(\myshift))}
在 x 方向上应用零偏移,在 y 方向上应用计算出的偏移。完整代码:
\documentclass{article}
\usepackage[no-math]{fontspec}
\setmainfont{Linux Libertine O}
\usepackage[libertine]{newtxmath}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data1.dat}
X Y Y_error Label
α -0.06 0.33 \\
β -0.51 0.19 $\star$
γ -0.80 0.19 $\star$
δ 0.54 0.27 \\
\end{filecontents}
\begin{filecontents}{data2.dat}
X Y Y_error Label
α -0.04 0.33 \\
β -0.85 0.17 $\star$
γ 0.89 0.15 $\star$
δ 0.36 0.31 $\star$ \\
\end{filecontents}
\begin{figure}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=0.15,
symbolic x coords={α,β,γ,δ},
xtick=data,
ybar,
point meta=explicit symbolic,
nodes near coords,
nodes near coords align={vertical},
visualization depends on=abs(y)/y*(0.1+\thisrow{Y_error}) \as \myshift,
every node near coord/.append style={
anchor=center,shift={(0,transformdirectiony(\myshift))},font={\bfseries},
}]
\addplot+[error bars/.cd, y dir=both, y explicit]
table[x=X, y=Y, y error=Y_error, meta=Label] {data1.dat};
\addplot+[error bars/.cd, y dir=both, y explicit]
table[x=X, y=Y, y error=Y_error, meta=Label] {data2.dat};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
输出(与原始输出相同,但没有令人讨厌的错误:-)
):