问题:
- 条形值“90”写在一条黑线上,几乎无法辨认
- 值“58”写在 x 刻度上,很难准备好
- 栏间距不好。栏之间的间距太大,顶部和底部栏的上方/下方没有空间。
其中一些可能是我的错,但我希望 pgfplots 应该可以自动避免这种混乱。我做错了什么?
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\begin{document}
\begin{figure}
\resizebox{\linewidth}{!}{
\begin{tikzpicture}
\begin{axis}[
xbar,
xmin=0.0,
xmax=91.6666666667,
width=12cm,
height={ 1cm + ( 3.0 * 1cm ) },
symbolic y coords={{Térritmus},{Mozgásritmus},{Formaritmus}},
xlabel={Pontérték \%},
ytick=data,
nodes near coords,
nodes near coords align = {horizontal}
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(58.3333333333,{Térritmus})
(91.6666666667,{Mozgásritmus})
(90.0,{Formaritmus})
};
\end{axis}
\end{tikzpicture}
}
\caption{Ritmus}
\end{figure}
\end{document}
答案1
第一个问题是由 引起的xmax=91.6666666667
。由于您已设置它,因此pgfplots
不会尝试计算 x 轴的上限。此外,在计算限制时不会考虑每个坐标附近的节点。
要解决第一个问题,删除xmax=91.6666666667
并添加enlarge x limits={rel=0.13,upper}
(值 0.13 必须任意选择)。要解决第二个和第三个问题,添加enlarge y limits=0.4
(同样,0.4 是任意的)。
另一个问题是,我的pgfplots
1.8 版 LaTeX 无法编译带有变音符号的代码symbolic y coords
。您可以使用ytick
和yticklabels
来实现 100% 的可重现性。
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
xmin=0.0,
width=12cm,
height=4cm,
enlarge x limits={rel=0.13,upper},
ytick={1,2,3},
yticklabels={{Térritmus},{Mozgásritmus},{Formaritmus}},
enlarge y limits=0.4,
xlabel={Pontérték \%},
ytick=data,
nodes near coords,
nodes near coords align=horizontal
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(58.3333333333,1)
(91.6666666667,2)
(90.0,3)
};
\end{axis}
\end{tikzpicture}
\end{document}
要解决第一个问题,您也可以移动条形内的节点。但您应该增加条形宽度(例如,增加到\baselineskip
):
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
bar width=\baselineskip,
xmin=0.0,
width=12cm,
height=4cm,
ytick={1,2,3},
yticklabels={{Térritmus},{Mozgásritmus},{Formaritmus}},
enlarge y limits=0.4,
xlabel={Pontérték \%},
ytick=data,
nodes near coords,
nodes near coords align=left,
every node near coord/.style={color=white}
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(58.3333333333,1)
(91.6666666667,2)
(90.0,3)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
你可以尝试以下几种方法:
every node near coord/.append style={anchor=east},
这使
或者改变xmax
成其他东西,例如
此外,您可以更改height
和bar width
以避开与xtick
height={ .5\textwidth},
bar width= .8cm,
无论哪种情况,我都会删除resizebox
并使用width=\textwidth
;使用可能会导致图表中的字体大小不一致,这会首先resizebox
否定使用的部分意义。pgfplots
% arara: pdflatex
% !arara: indent: {overwrite: on, trace: yes}
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
xmin=0.0,
xmax=110,
height={ .5\textwidth},
bar width= .8cm,
symbolic y coords={{Térritmus},{Mozgásritmus},{Formaritmus}},
xlabel={Pontérték \%},
ytick=data,
nodes near coords,
nodes near coords align = {horizontal},
%every node near coord/.append style={anchor=east},
width=\textwidth,
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(58.3333333333,{Térritmus})
(91.6666666667,{Mozgásritmus})
(90.0,{Formaritmus})
};
\end{axis}
\end{tikzpicture}
\end{document}