使用符号 x 坐标表达仅沿 y 方向的偏移(使用“轴方向 cs”表示)

使用符号 x 坐标表达仅沿 y 方向的偏移(使用“轴方向 cs”表示)

我有一个带误差线的垂直条形图。我想在误差线的正上方或正下方(结果显著的位置)放置一颗星号。

我使用提供的非常巧妙的技巧实现了这一点这个答案

这是一个简单的例子:

带误差线的垂直条形图

它确实有效,但我的问题是,与原始问题,我的 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}

输出(与原始输出相同,但没有令人讨厌的错误:-)):

在此处输入图片描述

相关内容