我想将与点 -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}