pgfplots - 如何实现两端条形图加起来为 100% 的 xbar 图?

pgfplots - 如何实现两端条形图加起来为 100% 的 xbar 图?

编辑我不再需要解决方案,我决定不使用右侧的“负”条,但我保留(而不是删除)这个问题,以防将来其他人寻找这个问题。

我想制作这种 xbar 绘图样式,其中两个值显然加起来等于 100%。

enter image description here

我已经找到了一个名为如何制作一个 pgfplots 堆叠 xbar 图,其中 bar-“显式元”标签根据输入表数据计算得出,但据我了解,它并没有真正的帮助。

笔记如果您对这个问题有更好的表述,请编辑标题。我不是母语人士,想不出更好的描述。

平均能量损失我目前所拥有的:

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{
pgfplots,
relsize,
sansmath
}

\begin{document}
\begin{center}
\begin{tikzpicture}[font=\sffamily\small\sansmath]
\begin{axis}[
height=7cm,
width=14cm,
%
xmin=0,
xmax=100,
%
ymin=2006,
ymax=2011,
%
xbar,
%
%axis lines*=left,
%
scaled y ticks=false,
y tick label style={/pgf/number format/1000 sep={}},
%
xlabel={Something in \%},
ylabel={Years},
%
legend style={at={(0.8,1.25)}},
legend columns=2,
legend cell align=left,
%
enlarge x limits=0.05,
enlarge y limits=0.1,
every axis x label/.style={
at={(ticklabel* cs:0.5)},
anchor=north,
yshift=-10pt
},
every axis y label/.style={
at={(ticklabel* cs:1.02)},
anchor=south,
text width=3cm
},
]
\addplot
[draw=black,fill=black!60]
coordinates
{(82.8,2011) (81.7,2010) (79.3,2009) (70.3,2008) (65.4,2007) (63.8,2006)};
\addlegendentry{abc}
\addplot
[draw=black,fill=white]
coordinates
{(17.2,2011) (18.3,2010) (20.7,2009) (29.7,2008) (34.6,2007) (36.7,2006)};
\addlegendentry{def}
\end{axis}
\end{tikzpicture}

\end{center}
\end{document}

图片我目前所拥有的:

enter image description here

答案1

您可以使用xbar stacked而不是 来堆叠条形图xbar。如果您使用表格提供数据,您还可以自动计算“负”条形图:

\documentclass{article}


\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=newest}

\pgfplotstableread{
Year Value
2006 63.8
2007 65.4
2008 70.3
2009 79.3
2010 81.7
2011 82.8
}\datatable

\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
xmin=0,
xmax=100,
%
ymin=2006,
ymax=2011,
%
xbar stacked,
%
scaled y ticks=false,
y tick label style={/pgf/number format/1000 sep={}},
ytick=data,
%
xlabel={Something in \%},
ylabel={Years},
enlarge y limits={abs=0.5},
%
nodes near coords,
every node near coord/.append style={anchor=east}
]
\addplot
[draw=black,fill=black!60, every node near coord/.append style=white]
table [x=Value, y=Year] {\datatable};
\addplot
[draw=black,fill=white, point meta=explicit]
table [x expr=100-\thisrow{Value}-1e-5, y=Year, meta expr=100-\thisrow{Value}-1e-5] {\datatable};
\end{axis}
\end{tikzpicture}

\end{center}
\end{document}

相关内容