当我想更改节点选项时,我在 pgfplots 中遇到了问题。
例如,如果我只想增加条形图和节点之间的距离,我可以使用选项yshift
,如果我只有朝一个方向的条形图,它就可以正常工作,但如果我有朝两个方向(正向和负向)的条形图,那么如果我只使用,它显然不起作用yshift=5pt
。问题的另一个例子是,如果我想根据条形图是正向还是负向为节点使用不同的锚点。
所以我想知道是否有一种通用的方法可以根据节点所属的条形图类型来改变节点的行为。
\documentclass[a4paper,10pt]{scrartcl}
\usepackage{filecontents}
\usepackage{pgfplots}
\begin{document}
\begin{filecontents*}{daten.dat}
X Y Y_error
0 -.3 .2
3 -.5 .3
6 .5 .1
8 1 .3
\end{filecontents*}
\pgfplotsset{
every node near coord/.append style = {yshift=5pt},
}
\begin{tikzpicture}
\begin{axis}[
extra y ticks = 0,
extra y tick labels = ,
extra y tick style = {grid = major},
nodes near coords,
nodes near coords align={vertical},
ybar,
height=0.5\textwidth,
width=0.5\textwidth,
symbolic x coords={0,3,6,8},
ymin=-1,
ymax=3,
xtick=data,
ytick={-1, -0.5,...,2.5},
]
\addplot+[error bars/.cd,y dir=both,y explicit] table[x=X, y=Y, y error=Y_error]{daten.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
使用选项,axis
每个节点visualization depends on
的yshift
是根据数据文件的Y
和列计算得出的,如下所示:Y_error
符号(y)* y_error = 绝对值(y)/y * y_error
\documentclass[a4paper,10pt]{scrartcl}
\usepackage{filecontents}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{filecontents*}{daten.dat}
X Y Y_error
0 -.3 .2
3 -.5 .3
6 .5 .1
8 1 .3
\end{filecontents*}
\begin{tikzpicture}
\begin{axis}[
extra y ticks = 0,
extra y tick labels = ,
extra y tick style = {grid = major},
nodes near coords,
nodes near coords align={vertical},
ybar,
height=0.5\textwidth,
width=0.5\textwidth,
symbolic x coords={0,3,6,8},
enlarge x limits=0.2,
ymin=-1.5,
ymax=2,
xtick={0,3,6,8},
visualization depends on=abs(y)/y*\thisrow{Y_error} \as \myshift,
every node near coord/.append style = {shift={(axis direction cs:0,\myshift)}}]
\addplot+[error bars/.cd,y dir=both,y explicit] table[x=X, y=Y, y error=Y_error {daten.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
这里的问题是对齐只会改变锚点,因此为了能够获得与符号无关的填充,您只需增加节点的高度即可。再进行一些调整,为节点提供一些空间,就可以解决问题。
\documentclass[a4paper,10pt]{scrartcl}
\usepackage{filecontents}
\usepackage{pgfplots}
\begin{document}
\begin{filecontents*}{daten.dat}
X Y Y_error
0 -.3 .2
3 -.5 .3
6 .5 .1
8 1 .3
\end{filecontents*}
\pgfplotsset{
every node near coord/.style = {minimum height=1cm},
}
\begin{tikzpicture}
\begin{axis}[
extra y ticks = 0,
extra y tick labels = ,
extra y tick style = {grid = major},
nodes near coords,
nodes near coords align={vertical},
ybar,
height=0.5\textwidth,
width=0.5\textwidth,
symbolic x coords={0,3,6,8},
ymin=-1,
ymax=3,
xtick=data,
ytick={-1, -0.5,...,2.5},
]
\addplot+[error bars/.cd,y dir=both,y explicit] table[x=X, y=Y, y error=Y_error]{daten.dat};
\end{axis}
\end{tikzpicture}
\end{document}