二维图中的 TikZ 节点引脚角度

二维图中的 TikZ 节点引脚角度

我想将与点 -3.09% 对应的图钉向左旋转,但当我将角度增加到 87 以上时,它会捕捉到 90 度,并且减号会进入刻度,即使在 87 度时,它看起来也不像 87 度(可能捕捉到较低的角度)。有没有办法消除角度捕捉?这是我的图:

\begin{tikzpicture}
\begin{axis}[clip=false,xmin=0,xmax=14,ymin=-70,ymax=20,major tick style={black},minor tick style={thin,black},minor x tick num=0,minor y tick num=4]
\draw[black](axis cs:0,0) -- (axis cs:14,0);
\addplot[color=blue,solid] coordinates {
(0,-61.5889524031168)
(1,-3.08914165008118)
(2,-6.51818367010861)
(3,2.54536181619180)
(4,-2.52797347614671)
(5,1.94530113590041)
(6,-1.68178736194508)
(7,1.45004681381708)
(8,-1.28443807064115)
(9,1.14729132172417)
(10,-1.04082348053453)
(11,0.948346997577710)
(12,-0.874976296246089)
(13,0.808047053786472)
(14,-0.754723886152266)
};
\addplot+[blue,mark=o,only marks]coordinates {
(0,-61.5889524031168)
(1,-3.08914165008118)
(2,-6.51818367010861)
(3,2.54536181619180)
(4,-2.52797347614671)
(5,1.94530113590041)
(6,-1.68178736194508)
(7,1.45004681381708)
(8,-1.28443807064115)
(9,1.14729132172417)
(10,-1.04082348053453)
(11,0.948346997577710)
(12,-0.874976296246089)
(13,0.808047053786472)
(14,-0.754723886152266)
}
node[pos=0,pin=10:${-}61.59$\%] {}
node[pos=0.1,pin=87:${-}3.09$\%] {}
node[pos=0.15,pin=290:${-}6.52$\%] {}
node[pos=0.2,pin=75:$2.55$\%] {}
node[pos=1,pin=210:${-}0.75$\%] {};
\end{axis}
\end{tikzpicture}

答案1

以下是我从中摘取的答案的定制我如何强制 TikZ 引脚角度?

用下面的代码替换有问题的代码

node[pos=0.1,pin={[inner sep=0pt,label={[inner ep=0pt,xshift=-5mm]80:${-}3.09$\%}]80:{}}] {}

给出

在此处输入图片描述

对此代码的一些解释:

标签本身就是节点,因此通常的设置直接适用。但是,跳过问题的原因并参考链接的问题,我们需要放置一个空标签(即节点),然后使用 Jake 的巧妙想法再次标记该标签。但请记住,您必须在两种情况下(80现在)更改角度。然后,由于图钉指向空节点,我们必须将其自己的标签进一步向左移动xshift=-5mm,您可以根据您提到的额外空间的需求进行调整。希望其余部分相对容易理解。

答案2

要自动定位标签文本而不以 45 度间隔对齐,您必须使用“普通”节点而不是节点label。您可以使用 插入此类节点append after command={ node [at=(\tikzlastnode), anchor=<angle>+180, inner sep=0pt] {<label text>} }。宏将保存对调用键的\tikzlastnode节点的引用。append after command

这是一种新样式,precise pin=<angle>:<label text>将使用这种方法放置图钉:

precise pin/.style args={#1:#2}{
    pin={[
        inner sep=0pt,
        label={[
            append after command={
                node [
                    inner sep=0pt,
                    at=(\tikzlastnode.#1),
                    anchor=#1+180
                ] {#2}
            }
        ]center:{}}
    ]#1:{}}
}

在你的情节中使用它会产生

\documentclass{article}
\usepackage{pgfplots}

\pgfplotstableread[col sep=comma]{
0,-61.5889524031168
1,-3.08914165008118
2,-6.51818367010861
3,2.54536181619180
4,-2.52797347614671
5,1.94530113590041
6,-1.68178736194508
7,1.45004681381708
8,-1.28443807064115
9,1.14729132172417
10,-1.0408234805345
11,0.94834699757771
12,-0.87497629624609
13,0.808047053786472
14,-0.754723886152266
}\datatable

\begin{document}
\begin{tikzpicture}[
    precise pin/.style args={#1:#2}{
        pin={[
            inner sep=0pt,
            label={[
                append after command={
                    node [
                        inner sep=0pt,
                        at=(\tikzlastnode.#1),
                        anchor=#1+180
                    ] {#2}
                }
            ]center:{}}
        ]#1:{}}
    }
]

\begin{axis}[clip=false,xmin=0,xmax=14,ymin=-70,ymax=20,major tick style={black},minor tick style={thin,black},minor x tick num=0,minor y tick num=4]
\draw[black](axis cs:0,0) -- (axis cs:14,0);
\addplot[color=blue,solid] table {\datatable};
\addplot+[blue,mark=o,only marks] table {\datatable}
    node[pos=0,precise pin=20:${-}61.59$\%] {}
    node[pos=0.1,precise pin=85:${-}3.09$\%] {}
    node[pos=0.15,precise pin=290:${-}6.52$\%] {}
    node[pos=0.2,precise pin=35:$2.55$\%] {}
    node[pos=1,precise pin=210:${-}0.75$\%] {}
;
\end{axis}
\end{tikzpicture}

\end{document}

相关内容