我正在尝试创建一个包含两个条形图的图形,其中条形以两两分组。我使用bar width
和bar shift
来分隔条形。我的问题是我想在这些图中添加误差线,但我不知道如何添加它们跟随我得到的只是几条条形图(很好!),但它们之间却有几条误差条(尴尬!)。
我怎么能把误差线放在中间呢?数据无需手动移动它们?
我目前的尝试:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
1 4 0.2 0.1
2 4.2 0.1 0.5
3 3.1 0.3 0.4
4 2.5 0.25 0.35
}\tablei
\pgfplotstableread{
1 3.5 0.1 0.3
2 3.8 0.2 0.2
3 4.0 0.25 0.25
4 3.0 0.3 0.5
}\tablet
% Bar styles
\pgfplotsset{shifti/.style={mark=no markers, bar width=4pt, bar shift=3pt}}
\pgfplotsset{shiftt/.style={mark=no markers, bar width=4pt, bar shift=-3pt}}
% Error styles
\pgfplotsset{err/.style={forget plot, draw=none}}
\pgfplotsset{errp/.style={err, error bars/.cd,x dir=plus, x explicit}}
\pgfplotsset{errm/.style={err, error bars/.cd,x dir=minus, x explicit}}
\begin{axis}[%
/pgfplots/table/header=false,
scale only axis,
width=12cm,
height=8cm,
axis on top]
\addplot+[xbar, shifti] table[x index=1, y index=0]{\tablei};
\addplot+[no markers, errm] table[x index=1, y index=0, x error index=2]{\tablei};
\addplot+[no markers, errp] table[x index=1, y index=0, x error index=3]{\tablei};
\addplot+[xbar, shiftt] table[x index=1, y index=0]{\tablet};
\addplot+[no markers, errm] table[x index=1, y index=0, x error index=2]{\tablet};
\addplot+[no markers, errp] table[x index=1, y index=0, x error index=3]{\tablet};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
正确定位误差线的最简单方法是使用yshift=<value>
来将误差线向上或向下移动。如果您使用<value>
与 相同的方法bar shift
,误差线将正确定位。在这种情况下,“适当的”自动解决方案需要支持不对称误差线,而 当前无法实现pgfplots
。可能值得打开一个功能要求为了这。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\pgfplotstableread{
1 4 0.2 0.1
2 4.2 0.1 0.5
3 3.1 0.3 0.4
4 2.5 0.25 0.35
}\tablei
\pgfplotstableread{
1 3.5 0.1 0.3
2 3.8 0.2 0.2
3 4.0 0.25 0.25
4 3.0 0.3 0.5
}\tablet
% Bar styles
\pgfplotsset{shifti/.style={mark=no markers, bar width=4pt, bar shift=3pt}}
\pgfplotsset{shiftt/.style={mark=no markers, bar width=4pt, bar shift=-3pt}}
% Error styles
\pgfplotsset{err/.style={forget plot, draw=none}}
\pgfplotsset{errp/.style={err, black, error bars/.cd,x dir=plus, x explicit}}
\pgfplotsset{errm/.style={err, black, error bars/.cd,x dir=minus, x explicit}}
\begin{axis}[%
/pgfplots/table/header=false,
scale only axis,
width=12cm,
height=8cm,
axis on top]
\addplot+[xbar, shifti] table[x index=1, y index=0]{\tablei};
\addplot+[no markers, yshift=3pt, errm] table[x index=1, y index=0, x error index=2]{\tablei};
\addplot+[no markers, yshift=3pt, errp] table[x index=1, y index=0, x error index=3]{\tablei};
\addplot+[xbar, shiftt] table[x index=1, y index=0]{\tablet};
\addplot+[no markers, yshift=-3pt, errm] table[x index=1, y index=0, x error index=2]{\tablet};
\addplot+[no markers, yshift=-3pt, errp] table[x index=1, y index=0, x error index=3]{\tablet};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}