pgfplots 中的条形图看起来非常糟糕

pgfplots 中的条形图看起来非常糟糕

在此处输入图片描述

问题:

  • 条形值“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 是任意的)。

另一个问题是,我的pgfplots1.8 版 LaTeX 无法编译带有变音符号的代码symbolic y coords。您可以使用ytickyticklabels来实现 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成其他东西,例如

在此处输入图片描述

此外,您可以更改heightbar 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}

相关内容