条形图 - 单色条形图

条形图 - 单色条形图

对于建议的条形图,我想为每个条形使用不同的颜色。我该怎么做?

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[
    title=Title,
        xbar,
        xmajorgrids = true,
        bar width=6mm, 
        width=12cm, height=5.5cm, 
        enlarge y limits=0.2,
        xlabel={\#number},
        symbolic y coords={A,B,C,D},
        ytick=data,
        nodes near coords, nodes near coords align={horizontal},
  ]

  \addplot coordinates {(1,A) (7,B) (5,C)(2,D)};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

从我的回答groupplot/barplot 中的颜色和图例

为了给每个条形图赋予不同的颜色 (...),每个条形图都需要作为自己的图来处理,也就是说,每个条形图都需要自己的\addplot ...命令。幸运的是,您不必写\addplot ...四遍,而是可以使用\pgfplotsinvokeforeach {0,...,3} { \addplot ... }

我建议您在表中提供数据,可以在外部数据文件中,也可以在使用创建的宏中提供\pgfplotstableread。这使得循环遍历数据变得更容易,并且使数据更易于维护(对于较大的数据集,坐标语法变得非常繁琐)。

此外,与使用符号坐标相比,我通常发现使用 绘制值\coordindex和使用 创建标签更容易yticklabels from table

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}

\begin{document}

\pgfplotsset{
    select row/.style={
        x filter/.code={\ifnum\coordindex=#1\else\def\pgfmathresult{}\fi}
    }
}

\pgfplotstableread[header=false]{
1 A
7 B
5 C
2 D
}\datatable

\begin{tikzpicture}
  \begin{axis}[
    title=Title,
        xbar, bar shift=0pt,
        enlarge y limits=0.2,
        xmin=0,
        ytick={0,...,4},
        yticklabels from table={\datatable}{1},
        xmajorgrids = true,
        bar width=6mm, 
        width=12cm, height=5.5cm, 
        xlabel={\#number},
        nodes near coords, nodes near coords align={horizontal},
  ]

\pgfplotsinvokeforeach{0,...,4}{
    \addplot table [select row=#1, y expr=#1] {\datatable};
}
\end{axis}
\end{tikzpicture}

\end{document}

相关内容