我正在尝试制作堆积直方图,并尝试从这个问题中提供的代码开始:带文本的 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
。