我的代码是:
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[title = some title,
xbar,
y axis line style = { opacity = 0 },
axis x line = none,
tickwidth = 0pt,
enlarge y limits = 0.2,
enlarge x limits = 0.02,
symbolic y coords = {Kesklinn, Mustamae, Kristiine, Nomme, Haabersti, Pohja-Tallinn, Lasnamae},
nodes near coords,
]
\addplot coordinates { (0.034,Kesklinn) (-0.011,Mustamae)
(-0.01,Kristiine) (0.025,Nomme) (0.018,Haabersti) (0.008,Pohja-Tallinn) (0.117,Lasnamae)};
\end{axis}
\end{tikzpicture}
\end{document}
我想要的是强制将每个条形的名称显示在适当的位置(有些根本不显示),如果条形为负数,我希望此条形的名称显示在右侧而不是左侧。此外,我希望将数字显示为百分比,并且不希望它们四舍五入(如 pgfplots 所做的那样)。
答案1
您的问题表明了一些问题:
重叠:Percusse 已经告诉您如何避免 y 刻度上的图重叠,尽管即使仅指定
enlarge x limits = 0.6
,而不指定 y 限制,也可以获得类似的结果。 甚至根本没有限制。 您可以选择适合您的方法。 在这种情况下,我选择了无限制。不出现勾号:某些 y 刻度没有出现的原因是您没有
ytick=data,
在符号坐标定义前添加选项。节点定位(待修复):对于右侧的节点,您可以添加
nodes near coords align={right},
或anchor=west
。这里的问题是,负值将与条形重叠,因为负值将附加到坐标的右侧,因此最终会覆盖条形本身。我认为除了手动移动所有节点之外,没有其他方法可以改变这种情况,因为通常人们希望他们的节点在标准位置的坐标附近。一个可能的替代方案是应用一个条件,以便只移动负值。但我还不确定如何做到这一点。
百分比:附近的坐标节点已使用以下命令转换为百分比:
nodes near coords={$\pgfmathprintnumber{\pgfplotspointmeta}\%$}, point meta=100*x,
输出
代码
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\begin{document}
\begin{tikzpicture}
\begin{axis}[title = some title,
xbar,
y axis line style = { opacity = 0 },
axis x line = none,
tickwidth = 0pt,
ytick=data,
symbolic y coords={Kesklinn, Mustamae, Kristiine, Nomme, Haabersti, Pohja-Tallinn, Lasnamae},
y tick label style={anchor=east},
nodes near coords={$\pgfmathprintnumber{\pgfplotspointmeta}\%$},
point meta=100*x,
nodes near coords align={anchor=west},
every node near coord/.append style={%
xshift=5mm
}
]
\addplot coordinates {
(0.034,Kesklinn)
(-0.011,Mustamae)
(-0.01,Kristiine)
(0.025,Nomme)
(0.018,Haabersti)
(0.008,Pohja-Tallinn)
(0.117,Lasnamae)
};
\end{axis}
\end{tikzpicture}
\end{document}