我刚刚开始使用 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 轴范围(即ymin
和ymax
),以根据我的意愿平移这些坐标系。
以下是代码(对一些与我的问题无关的细节进行了一些评论,但可能有助于更好地理解图片):
\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=-5
在axis
环境中设置,则 x 轴将绘制在高度 -5 处。由于条形图绘制在高度 0 到用户指定的某个高度之间,因此条形图将位于 x 轴上方 5 个单位处。
为了明确地了解我的意思,您可以将其放入您想要查看的 y 轴坐标的ytick={},
环境中axis
(将其放在方括号内)。
我希望这个(不是特别优雅的)想法能帮到别人!干杯!