请考虑以下 MWE。
我想做三件事:
- 个性化着色对于最后一个元素(“未被拒绝”),我想用另一种颜色(例如橙色)填充条形图
- 更美观的 x 轴标签x 轴标签“not denied”太长了,因此我选择通过 旋转所有 x 轴标签
x tick label style = {rotate=90}
。但是,看起来不太好看。所以也许有人有主意。(我刚刚想到的是:我可以用“*”替换“not denied”,并在图下添加注释。不知道如何实现。) - 条形标签当前的 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}