代码生成一个水平条形图,其中每个条形的名称(“a”、“b”等)仅出现在其他每个条形中。条形的数量(10)似乎会引发此问题;删除其中一个条形即可解决问题。但显然我需要 10 个条形
\begin{tikzpicture}
\begin{axis}[title = Figure 1,
xbar,
y axis line style = { opacity = 0 },
axis x line*=bottom,
tickwidth = 0pt,
xmin=0,
/pgf/bar width=18pt,
width=.75\textwidth,
symbolic y coords = {a,
b,
c,
d,
e,
f,
g,
h,
i,
j },
nodes near coords,
]
\addplot coordinates {(14,a)
(15,b)
(16,c)
(16,d)
(17,e)
(21,f)
(21,g)
(30,h)
(34,i)
(34,j)};
\end{axis}
\end{tikzpicture}
答案1
Pgfplots 有自己的方法来决定有用的刻度密度等。在大多数情况下,这个决定会产生吸引人的输出。但有时必须推翻 做出的决定pgfplots
。这样做的一种方法是设置刻度之间的距离。在你的情况下,似乎说 就足够了ytick distance=1
。
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[title = Figure 1,
xbar,
y axis line style = { opacity = 0 },
axis x line*=bottom,
tickwidth = 0pt,
xmin=0,
/pgf/bar width=18pt,
width=.75\textwidth,ytick distance=1,
symbolic y coords = {a,
b,
c,
d,
e,
f,
g,
h,
i,
j },
nodes near coords,
]
\addplot coordinates {(14,a)
(15,b)
(16,c)
(16,d)
(17,e)
(21,f)
(21,g)
(30,h)
(34,i)
(34,j)};
\end{axis}
\end{tikzpicture}
\end{document}
答案附有请求,请考虑在您的帖子中提供完整的最小工作示例,即像上面那样以 开头\documentclass
、以 结尾的文档\end{document}
可以编译并包含足以说明问题的内容。完全可以想象,tikzpicture 的代码在不同的文档类中表现不同,因为例如\textwidth
依赖于它们。
答案2
除非您想要一些炫耀性的附加组件,对于简单的水平条形图,我建议使用简单易用的bchart
软件包。只有几个选项可用,但足以获得干净优雅的结果。
然而,为了展示如何在这些选项之外自定义情节的某些部分,MWE 展示了不必要的和不雅的彩色情节。
\documentclass[tikz,border=3.14mm]{standalone}
\newcounter{ylab}\setcounter{ylab}{0}
\usepackage{bchart}\renewcommand{\bcfontstyle}{\color{green!30!black}}
\def\xbar#1{\color{darkgray}\stepcounter{ylab}%
\bcbar[label=\color{red!70!black}\alph{ylab},%
value=\textcolor{blue!#1!blue!70}{#1},color=blue!#1]{#1}}
\begin{document}
\begin{bchart}[step=5,max=35,scale=1,width=.5\linewidth]
\xbar{34}
\xbar{30}
\xbar{21}
\xbar{17}
\xbar{16}
\xbar{16}
\xbar{15}
\xbar{14}
\xbar{9}
\xbar{17}
\end{bchart}
\end{document}