条形图中各个条形的颜色不同并添加条形标签

条形图中各个条形的颜色不同并添加条形标签

请考虑以下 MWE。

我想做三件事:

  1. 个性化着色对于最后一个元素(“未被拒绝”),我想用另一种颜色(例如橙色)填充条形图
  2. 更美观的 x 轴标签x 轴标签“not denied”太长了,因此我选择通过 旋转所有 x 轴标签x tick label style = {rotate=90}。但是,看起来不太好看。所以也许有人有主意。(我刚刚想到的是:我可以用“*”替换“not denied”,并在图下添加注释。不知道如何实现。)
  3. 条形标签当前的 y 值表示每个元素的绝对出现次数。但是,我想在每个元素的条形图顶部添加其相对出现次数。该信息在表格的最后一列中提供EvalAbgelehntePP.dat

条形图

平均能量损失

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

\begin{filecontents}{EvalAbgelehntePP.dat}
Wert    PP  HaeufigkeitAbs  HaeufigkeitRel
1   4   682 61.49684400360685
2   5   630 56.80793507664562
3   7   457 41.2082957619477
4   9   414 37.33092876465284
5   1   403 36.339044183949504
6   8   394 35.527502254283135
7   6   360 32.46167718665464
8   3   268 24.16591523895401
9   2   254 22.90351668169522
10  10  207 18.66546438232642
11  {not rejected}  226 20.378719567177637
\end{filecontents}

\begin{document}

\begin{tikzpicture} 
\begin{axis}[ 
    ybar,
    xtick={1,...,11},
    xticklabels from table = {EvalAbgelehntePP.dat}{PP},
    x tick label style = {rotate=90},
    xtick align=inside,
    xlabel={production programms},
    every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},
    ylabel=occurrence,
    every axis y label/.style={at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel}
] 


\addplot[ybar,fill=blue] table [ 
    x=Wert, 
    y=HaeufigkeitAbs,
] {EvalAbgelehntePP.dat} ;

\end{axis} 
\end{tikzpicture} 

\end{document}

答案1

您可以采用以下方法当条形图基于符号值时,是否可以更改单个条形的颜色?用于将单个条形图涂成不同的颜色。我不确定单个长标签的最佳方法是什么(什么是PP?)。我在这里所做的只是旋转长标签,而其他标签则保持不变。

要添加相对值,您必须meta通过设置键point meta=explicit然后meta=<column name>在表选项中使用来告诉 PGFPlots 您正在提供一个值:

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

\pgfplotsset{
    discard if/.style 2 args={
        x filter/.code={
            \ifdim\thisrow{#1} pt=#2pt
                \def\pgfmathresult{inf}
            \fi
        }
    },
    discard if not/.style 2 args={
        x filter/.code={
            \ifdim\thisrow{#1} pt=#2pt
            \else
                \def\pgfmathresult{inf}
            \fi
        }
    }
}

\begin{filecontents}{EvalAbgelehntePP.dat}
Wert    PP  HaeufigkeitAbs  HaeufigkeitRel
1   4   682 61.49684400360685
2   5   630 56.80793507664562
3   7   457 41.2082957619477
4   9   414 37.33092876465284
5   1   403 36.339044183949504
6   8   394 35.527502254283135
7   6   360 32.46167718665464
8   3   268 24.16591523895401
9   2   254 22.90351668169522
10  10  207 18.66546438232642
11  {\rotatebox{90}{not rejected}}  226 20.378719567177637
\end{filecontents}

\begin{document}

\begin{tikzpicture} 
\begin{axis}[ 
    ybar,
    xtick={1,...,11},
    xticklabels from table = {EvalAbgelehntePP.dat}{PP},
    xtick align=inside,
    xlabel={production programms},
    every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},
    ylabel=occurrence,
    every axis y label/.style={at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel}
] 


\addplot[ybar, bar shift=0pt, fill=blue,
    discard if={Wert}{11},
    nodes near coords=\pgfmathprintnumber{\pgfplotspointmeta}\%,
    every node near coord/.style={
        font=\scriptsize,
        /pgf/number format/precision=0
    },
    point meta=explicit] table [ 
    x=Wert, 
    y=HaeufigkeitAbs,
    meta=HaeufigkeitRel
] {EvalAbgelehntePP.dat} ;

\addplot[ybar, bar shift=0pt, fill=orange,
    discard if not={Wert}{11},
    nodes near coords=\pgfmathprintnumber{\pgfplotspointmeta}\%,
    every node near coord/.style={
        font=\scriptsize,
        /pgf/number format/precision=0
    },
    point meta=explicit] table [ 
    x=Wert, 
    y=HaeufigkeitAbs,
    meta=HaeufigkeitRel
] {EvalAbgelehntePP.dat} ;

\end{axis} 
\end{tikzpicture} 

\end{document}

相关内容