我找不到正确对齐条形图的方法,条形图有 3 组条形,每组有 1、2 和 3 个条形。以下是我目前所得到的:
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\scriptsize
\centering
\begin{tikzpicture}
\begin{axis}[
xtick={1,2,3,4,5,6},
xticklabels={Lodging,,, Ridesharing, , Freelancing},
xticklabel style = {xshift=-0.25cm},
enlarge y limits=0,
enlarge x limits=0.25,
ymin=0,
ymax=32,
ytick={0,10,20,30},
nodes near coords,
visualization depends on={meta < 4 \as \valueissmall},
every node near coord/.append style={
anchor={\ifdim\valueissmall pt=1 pt south\else north\fi},
{\ifdim\valueissmall pt=1 pt black\else white\fi}
},
ybar=-6pt,
bar width=13pt,
xtick style={draw=none},
]
\addplot[ybar,fill=gray] coordinates {(1, 27)};
\addplot[ybar,fill=gray,bar shift=30pt] coordinates {(2, 10)};
\addplot[ybar,fill=gray,bar shift=20pt] coordinates {(3, 5)};
\addplot[ybar,fill=gray,bar shift=37pt] coordinates {(4, 3)};
\addplot[ybar,fill=gray,bar shift=27pt] coordinates {(5, 2)};
\addplot[ybar,fill=gray] coordinates {(6, 1)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我觉得你可能把事情想得有点复杂了。
用 x 坐标代替bar shift
s 可能更方便。也就是说,将第一个条形图设置为 x=1,将第二个和第三个条形图设置为 x=3 和 4,将最后三个条形图设置为 x=6、7、8。
这样一来,放置刻度标签就变得容易了。使用xtick={1,3.5,7}
,即在每个条形组的中心放置刻度,然后xticklabels={Lodging,Ridesharing,Freelancing}
,即没有空标签。这样,xshift
刻度标签样式中的 就没有必要了。
不要使用多个\addplot
s,而只使用一个\addplot
,并且没有必要ybar
在\addplot
选项中使用 。
对于条形上方的标签,您可以直接在坐标流中添加平台名称作为元信息,例如(1, 27) [AirBnb]
。然后添加visualization depends on={y \as \yvalue}
,并将更改为nodes near coords
。nodes near coords={\pgfplotspointmeta\\\pgfmathprintnumber{\yvalue}}
为了使换行符(\\
)正常工作,您需要align=center
采用的样式nodes near coords
。
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\scriptsize
\centering
\begin{tikzpicture}
\begin{axis}[
xtick={1,3.5,7},
xticklabels={Lodging,Ridesharing,Freelancing},
enlarge x limits=0.1,
ymin=0,
ymax=32,
ytick={0,10,20,30},
nodes near coords={\pgfplotspointmeta\\\pgfmathprintnumber{\yvalue}},
visualization depends on={y \as \yvalue},
every node near coord/.append style={
align=center,
},
ybar,
bar width=13pt,
xtick style={draw=none},
]
\addplot[fill=gray, point meta=explicit symbolic] coordinates {
(1, 27) [AirBnb]
(3, 10) [Uber]
(4, 5) [Lyft]
(6, 3) [Taskrabbit]
(7, 2) [Upwork]
(8, 1) [Frkrldjnrj]
};
\end{axis}
\end{tikzpicture}
\end{document}