用不同颜色和标签表示正值或负值的条形图

用不同颜色和标签表示正值或负值的条形图

我有一个简单的条形图,如果与它相关的值是正数或负数,我想更改条形的颜色。我还想更改 Y 标签以使用不同的标签而不是数字。例如,如果 Y 值是温度,我想将负值设为蓝色,将正值设为红色。然后在 Y 标签上,我希望它显示“冷”,而不是 -100。

\begin{tikzpicture}
    \begin{axis}[
      ybar,
      grid=both,
      bar width=24pt,
      ylabel near ticks,      
      yticklabel pos=right,
      symbolic x coords={A,B,C,D,E,F},
    ]
      \addplot[fill=blue] coordinates {
        (A, -45)
        (B, -58)
        (C, -43)
        (D, 35)
        (E, 19)
        (F, 65)
      };
    \end{axis}
  \end{tikzpicture}

我如何实现这个目标?

答案1

这不是自动的,但您可以将数据拆分成两个\addplot,一个是蓝色列,另一个是红色列。您将需要bar shift=0pt,否则pgpflots将在每个坐标处为两个条形腾出空间。

我不太明白你关于标签的意思,所以如果你再回头检查的话,如果我的理解有误,请纠正我。

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}

    \begin{axis}[
      ybar,
      grid=both,
      bar width=24pt,
      bar shift=0pt,  %% <-- added
      ylabel near ticks,      
      yticklabel pos=right,
      symbolic x coords={A,B,C,D,E,F},
      ytick={-50,0,50}, %% <-- added
      yticklabels={\textcolor{blue}{Cold},0,\textcolor{red}{Warm}}, %% <-- added
    ]
      \addplot[fill=blue] coordinates {
        (A, -45)
        (B, -58)
        (C, -43)
      };

      \addplot[fill=red] coordinates {
        (D, 35)
        (E, 19)
        (F, 65)
      };
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容