Построение сгруппированной столбчатой ​​диаграммы с 2 наборами осей Y в pgfplot

Построение сгруппированной столбчатой ​​диаграммы с 2 наборами осей Y в pgfplot

Я пытаюсь построить столбчатую диаграмму с помощью pgfplots с двумя рядами данных и двумя отдельными осями Y (одна слева, одна справа).

Чтобы иметь разные оси, мне, похоже, нужно поместить каждую \addplotв свою собственную axisсреду (см. код ниже). Однако, когда я это делаю, полосы рисуются друг над другом, и я не могу их разделить:

Стержни укладываются друг на друга и должны быть отделены друг от друга.

Если \addplotкоманды находятся в одном и том же месте axis, столбцы группируются правильно, но тогда я не могу использовать вторую ось Y.

Этот вопросказалось многообещающим, но все сюжеты там нарисованы в первой axisсреде

Вот мой код:

\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{width=9cm,compat=1.5.1}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    ybar,
    symbolic x coords={(a), (b), (c), (d), (e), (f), (g), (h), (i)},
    axis y line*=left,
    axis x line=none,
    ymin=0, ymax=6,
    ylabel=data set 1,
    enlarge x limits=0.2,
    xtick=data]
    \addplot[mark=*,draw=black,fill=cyan,error bars/.cd, y dir=both, y explicit, error bar style={line width=1pt,solid, black}] coordinates {
        ((a),2.208) +- (0.004, 0.004)
        ((b),2.394) +- (0.028, 0.028) 
        ((c), 2.452) +- (0.040, 0.040)
        ((d), 4.000) +- (0.757, 0.757)
        ((e), 2.561) +- (0.245, 0.245)
        ((f), 2.600) +- (0.423, 0.423)
        ((g), 2.731) +- (0.267, 0.267)
        ((h), 2.840) +- (0.207, 0.207)
        ((i), 2.000) +- (0.146, 0.146)
    };
\end{axis} % start a new axis for the second data set
\begin{axis}[
    ybar,
    symbolic x coords={(a), (b), (c), (d), (e), (f), (g), (h), (i)},
    axis y line*=right,
    ymin=0, ymax=5,
    ylabel=data set 2,
    enlarge x limits=0.2]
\addplot[mark=*,fill=red!50,error bars/.cd, y dir=both, y explicit, error bar style={line width=1pt,solid, black}] coordinates {
        ((a),2.21) +- (0.004, 0.004)
        ((b),1.394) +- (0.028, 0.028) 
        ((c), 3.452) +- (0.040, 0.040)
        ((d), 2.346) +- (0.757, 0.757)
        ((e), 1.561) +- (0.245, 0.245)
        ((f), 1.3300) +- (0.423, 0.423)
        ((g), 1.931) +- (0.267, 0.267)
        ((h), 2.820) +- (0.207, 0.207)
        ((i), 3.00) +- (0.146, 0.146)
    };
\end{axis}
\end{tikzpicture}

\end{document}

решение1

Возможно, вы уже догадались об этом, или прошло время, и вам это не нужно, но в любом случае: с помощью соответствующих bar widthи bar shift, а также соответствующих xshiftмаркеров вы можете получить следующее:

введите описание изображения здесь

\documentclass{article} % don't use minimal
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{width=9cm,compat=1.5.1}

\begin{document}

\begin{tikzpicture}[
   declare function={
    barW=8pt; % width of bars
    barShift=barW/2; % bar shift
  }
]
\begin{axis}[
    ybar,
    bar width=barW, % added
    bar shift=-barShift, % added
    symbolic x coords={(a), (b), (c), (d), (e), (f), (g), (h), (i)},
    axis y line*=left,
    axis x line=none,
    ymin=0, ymax=6,
    ylabel=data set 1,
    enlarge x limits=0.1,
    xtick=data
 ]
    \addplot[mark=*,
             mark options={xshift=-barShift}, % <-- added
             draw=black,
             fill=cyan,
             error bars/.cd,
               y dir=both,
               y explicit,
               error bar style={line width=1pt,solid, black}
    ] coordinates {
        ((a),2.208) +- (0.004, 0.004)
        ((b),2.394) +- (0.028, 0.028) 
        ((c), 2.452) +- (0.040, 0.040)
        ((d), 4.000) +- (0.757, 0.757)
        ((e), 2.561) +- (0.245, 0.245)
        ((f), 2.600) +- (0.423, 0.423)
        ((g), 2.731) +- (0.267, 0.267)
        ((h), 2.840) +- (0.207, 0.207)
        ((i), 2.000) +- (0.146, 0.146)
    };
\end{axis} % start a new axis for the second data set
\begin{axis}[
    ybar,
    bar width=barW,
    bar shift=barShift,
    symbolic x coords={(a), (b), (c), (d), (e), (f), (g), (h), (i)},
    axis y line*=right,
    ymin=0, ymax=5,
    ylabel=data set 2,
    enlarge x limits=0.1
]
\addplot[mark=*,
         mark options={xshift=barShift}, % <-- added
         fill=red!50,
         error bars/.cd,
           y dir=both,
           y explicit,
           error bar style={line width=1pt,solid, black}
] coordinates {
        ((a),2.21) +- (0.004, 0.004)
        ((b),1.394) +- (0.028, 0.028) 
        ((c), 3.452) +- (0.040, 0.040)
        ((d), 2.346) +- (0.757, 0.757)
        ((e), 1.561) +- (0.245, 0.245)
        ((f), 1.3300) +- (0.423, 0.423)
        ((g), 1.931) +- (0.267, 0.267)
        ((h), 2.820) +- (0.207, 0.207)
        ((i), 3.00) +- (0.146, 0.146)
    };
\end{axis}
\end{tikzpicture}

\end{document}

Связанный контент