如何制作具有多个“级别”的条形图

如何制作具有多个“级别”的条形图

我刚刚开始使用 TikZ,正在尝试制作以下条形图:

条形图

我的主要问题是定义条形类型,在其中我可以放置以下参数(针对每个条形单独放置!):(1)条形的起始高度,(2)条形的高度,(3)条形上方“坐标附近的节点”标记的距离,

或者找到已经实现的可以模拟这种情况的东西。

这样,我就能制作出三个“级别”的图表(或三个合一的图表),如图所示。

另一个问题是那些垂直线不与条形图及其上方的数字重叠。

到目前为止我所拥有的是:

\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document}


\pgfplotsset{mystyle/.style=
{
font=\tiny,
ybar,
bar shift={0pt},
xtick={1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.25,4.5,4.75,5,5.25},
ytick=\empty,
xmin=0.75,
xmax=5.25,
ymin=0,
ymax=100,
bar width=10,
nodes near coords={\pgfmathprintnumber{\pgfplotspointmeta}},
}}

\begin{tikzpicture}
\begin{axis}[mystyle]
\addplot [draw=green, fill=green] plot coordinates
{(1,1) (1.5,2) (2.5,3) (3, 7) (3.5, 10) (4, 17) (4.5, 18) (5,8)};
\end{axis}
\end{tikzpicture}

\end{document}

任何帮助都将非常感激!

答案1

这是我所做的。在一个tikzpicture环境中,我放置了三个axis环境并修改了它们的 y 轴范围(即yminymax),以根据我的意愿平移这些坐标系。

以下是代码(对一些与我的问题无关的细节进行了一些评论,但可能有助于更好地理解图片):

\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{fix-cm} % package that enables all font sizes for Computer Modern font; not essential in this example

\begin{document}

\fontsize{3pt}{6pt}

\pgfplotsset{mystyle/.style=
{
ybar,
xtick={1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.25,4.5,4.75,5},
x tick label style={major tick length=2pt, tick style=white}, % this makes ticks white (i.e. invisible on white surface), but I want to keep them in order to be able to manipulate the space between the x-axis and the numbers
ytick=\empty,
nodes near coords,
xmin=0.75,
xmax=5.25, % y-dimensions will be determined for each axis environment separately 
bar width=9pt, 
line width=0.1pt,
}}


\begin{tikzpicture}
\begin{axis}[mystyle, ymin=-5,ymax=95, grid=both,] % the "grid=both" part draws grids for both axes; as y-axis doesn't have ticks, grids are not drawn;
%it is neccessary to put grid command here, and not in the definition of mystyle, to avoid that the grids cross other bars 
\addplot [draw=black, fill=green] plot coordinates
{(1,1) (1.5,2) (2.5,3) (3, 7) (3.5, 10) (4, 17) (4.5, 18) (5,8)};
\end{axis}


\begin{axis}[mystyle, ymin=-35,ymax=65,]
\addplot [draw=black, fill=blue] plot coordinates
{(1,32) (1.5,16) (2,13) (2.5,4) (5,1)};
\end{axis}


\begin{axis}[mystyle, ymin=-80,ymax=20,]
\addplot [draw=black, fill=yellow] plot coordinates
{(1,5) (1.25,9) (1.5,13) (1.75,14) (2,12) (2.25,6) (2.5,2) (2.75,1) (3, 1) (3.25,1) (3.5, 1) (4, 1)};
\end{axis}


\end{tikzpicture}

\end{document}

这是图片 在此处输入图片描述

重点是,如果您ymin=-5axis环境中设置,则 x 轴将绘制在高度 -5 处。由于条形图绘制在高度 0 到用户指定的某个高度之间,因此条形图将位于 x 轴上方 5 个单位处。

为了明确地了解我的意思,您可以将其放入您想要查看的 y 轴坐标的ytick={},环境中axis(将其放在方括号内)。

我希望这个(不是特别优雅的)想法能帮到别人!干杯!

相关内容