使用 pgfplots 和 TiKz 反转轴

使用 pgfplots 和 TiKz 反转轴

我正在尝试制作堆积直方图,并尝试从这个问题中提供的代码开始:带文本的 Tikz 堆积条形图

但是,我想反转轴,这样 A、B、C... 标签位于 x 坐标上,而值位于 y 坐标上。我还希望图表占据所有可用宽度。以下是我尝试的:

\documentclass[landscape]{article}

\usepackage{xcolor}
\usepackage{tikz}
\usepackage{pgfplots}

\definecolor{findOptimalPartition}{HTML}{D7191C}
\definecolor{storeClusterComponent}{HTML}{FDAE61}
\definecolor{dbscan}{HTML}{ABDDA4}
\definecolor{constructCluster}{HTML}{2B83BA}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ybar stacked,
    xtick=data,
    axis x line*=none,
    axis y line*=left,
    tick label style={font=\footnotesize},
    legend style={font=\footnotesize},
    label style={font=\footnotesize},
    ytick={0,100,200,300,400,500,600},
    width=.9\textwidth,
    bar width=6mm,
    ylabel={Time in ms},
    xticklabels={A, B, C, D, E, F},
    ymin=0,
    ymax=600,
    area legend,
    x=8mm,
    enlarge x limits={abs=0.625},
]
\addplot[findOptimalPartition,fill=findOptimalPartition] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[storeClusterComponent,fill=storeClusterComponent] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[dbscan,fill=dbscan] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[constructCluster,fill=constructCluster] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\end{axis}  
\end{tikzpicture}
\end{document}

所以在这里我只是尝试反转轴,但我得到的Overfull \hbox是 13000pt。至于图表占用所有可用空间,我考虑将线改为x=8mm依赖于的东西\textwidth,这是一个可行的想法吗?

答案1

控制图宽度的更好方法是使用width键。如果你想要全宽,请使用width=\textwidth。另外,使用

x=8mm,
enlarge x limits={abs=0.625},

用于调整宽度。因此请将其移除。

\documentclass[landscape]{article}

\usepackage{xcolor}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\definecolor{findOptimalPartition}{HTML}{D7191C}
\definecolor{storeClusterComponent}{HTML}{FDAE61}
\definecolor{dbscan}{HTML}{ABDDA4}
\definecolor{constructCluster}{HTML}{2B83BA}

\begin{document}
\noindent  %% add this to avoid bad box
\begin{tikzpicture}
\begin{axis}[
    ybar stacked,
    xtick=data,
    axis x line*=none,
    axis y line*=left,
    tick label style={font=\footnotesize},
    legend style={font=\footnotesize},
    label style={font=\footnotesize},
    ytick={0,100,200,300,400,500,600},
    width=\textwidth,           %% this is enough
    bar width=6mm,
    ylabel={Time in ms},
    xticklabels={A, B, C, D, E, F},
    ymin=0,
    ymax=600,
    area legend,
    %x=8mm,
%    enlarge x limits={abs=0.625},
]
\addplot[findOptimalPartition,fill=findOptimalPartition] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[storeClusterComponent,fill=storeClusterComponent] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[dbscan,fill=dbscan] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\addplot[constructCluster,fill=constructCluster] coordinates
{(0,20) (1,108) (2,21) (3,35) (4,12) (5,17)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

xscale如果你仍然不满意,也可以使用 键缩放 x 轴。例如,使用xscale=2而不是width=\textwidth来获得

在此处输入图片描述

如您所见,这只会缩放 x 轴,从而使图的宽度增加,您可能需要yscale自行调整。或者,如果您scale=2同时使用 x 轴和 y 轴,则将缩放。

在此处输入图片描述

由于这些需要更多手动调整,因此最好使用按键width

相关内容