更改 Ybar 的颜色

更改 Ybar 的颜色

我使用了来自此的 ybar例子除了颜色之外,它完全符合我的要求。

\documentclass[border=0.2cm]{standalone}
 
% Bar chart drawing library 
\usepackage{pgfplots} 
\usetikzlibrary{patterns}
\pgfplotsset{compat=1.18}
\begin{tikzpicture}
    
    \begin{axis}[ybar interval, ymax=5,ymin=0, minor y tick num = 3]
        \addplot coordinates { (1, 2) (2, 4) (3, 5) (4, 4) (5, 2) (6, 0) };
    \end{axis}

\end{tikzpicture}
\end{document}

得到以下图表:

我现在想改变每个条的颜色,但我最初将每个条拆分为单个条的方法\addplot没有奏效。

有什么想法可以改变颜色吗?

答案1

我觉得这种简单的 TikZ 方式对用户来说更灵活。事实上,其他命令是装饰用的;你只需要一个循环\foreach

\foreach \i/\j/\color in {1/2/cyan,2/4.5/magenta,3/5.1/teal,4/2.5/violet,5/3.5/orange}
\draw[line width=8mm,color=\color] (\i,0)--+(90:\j);        

line width=10mm如果您希望颜色列之间没有间隙,请使用。

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[gray!30] (0,0) grid[xstep=0] (6,5.5);
\foreach \i in {1,...,5} \path (\i,0) node[below] {$\i$};
\foreach \j in {0,.2,...,5.5} \draw (0,\j)--+(.1,0);    
\foreach \j in {0,...,5} \path (0,\j) node[left] {$\j$};    
\draw[thick] (0,0) rectangle (6,5.5);

\foreach \i/\j/\color in {1/2/cyan,2/4.5/magenta,3/5.1/teal,4/2.5/violet,5/3.5/orange}
\draw[line width=8mm,color=\color] (\i,0)--+(90:\j);        
\end{tikzpicture}
\end{document}

更新:添加每列高度的数字。我发现 TikZ/TeX 不太适应巧合命名[color=\color],所以我改为[color=\icolor]

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[xscale=1.5]
\draw[gray!30] (0,0) grid[xstep=0] (6,6);
\foreach \j in {0,.2,...,6} \draw (0,\j)--+(.1,0);    
\foreach \j in {0,...,5} \path (0,\j) node[left] {$\j$};    
\draw[thick] (0,0) rectangle (6,6);

\foreach \i/\j/\icolor in {1/2/cyan,2/4.5/magenta,3/5.1/teal,4/2.5/violet,5/3.5/orange}
\draw[line width=8mm,color=\icolor] 
(\i,0) node[below=-4mm,black] {$\i$}
--(\i,\j) node[above=-4mm]{$\j$};
        
\end{tikzpicture}
\end{document}

答案2

您的初始解决方案是它的工作原理。这是您要寻找的吗:

\documentclass[border=0.2cm]{standalone}
\usepackage{pgfplots}


\begin{document}
    
\begin{tikzpicture}
        \begin{axis}[
          minor y tick num = 3,
          ybar=0cm,
          bar width=1cm,
          ymin=0,
          ymax=7,
          ylabel=values,
          xtick=data,
          xticklabels={My bar chart},
         ]                 
\addplot[draw=cyan, fill=cyan] coordinates {(1, 2) };
\addplot[draw=magenta, fill=magenta] coordinates {(1, 4) };
\addplot[draw=green, fill=green] coordinates {(1, 5) };
\addplot[draw=yellow, fill=yellow] coordinates {(1, 4) };
\addplot[draw=gray, fill=gray] coordinates {(1, 3) };
\addplot[draw=orange, fill=orange] coordinates {(1, 1) };
    
\end{axis}
\end{tikzpicture}
\end{document}}

在此处输入图片描述

答案3

灵感来自@onpra7的回答这里,另一个\foreach循环绘制每个条形图:

\documentclass[border=0.2cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ymin=0, ymax=5.5,
    minor y tick num = 3,
  ]
    \foreach \x/\y/\color in {
      1/2/cyan,
      2/4/magenta,
      3/5/green,
      4/4/yellow,
      5/2/gray,
      6/0/orange
    } {
      \edef\mybar{\noexpand\addplot[fill=\color]
        coordinates {(\x-0.5,0) (\x-0.5,\y) (\x+0.5,\y) (\x+0.5,0)} --cycle;
      }\mybar
    }
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容