重叠标记图和箱线图

重叠标记图和箱线图

我不太熟悉 pgfplots 中的箱线图。但现在我必须做一些。第一个结果很好,有 3 个箱子及其相应的数据。我想将此代码重用于另一个带有 2 个箱子的箱线图。现在出现了 2 个问题。

  1. 数据和框不再重叠,而是移到了一边。

在此处输入图片描述

  1. 经过多次尝试,我能想到的唯一解决方案是添加一个虚拟框并用 隐藏它draw=none。但是我有这个额外的 x 轴刻度,我无法摆脱它。

在此处输入图片描述

我基本上不太明白盒子的位置是如何决定的。我以为1箱线图中的坐标与标记图中的(1, 3.9)坐标相同(例如(1,4.1))。但事实似乎并非如此。

有没有比添加虚拟箱线图更好的解决方案以及如何摆脱额外的 x 刻度?

谢谢。

梅威瑟:

\documentclass[border=0.5cm]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            title=\textbf{Title},
            legend style={at={(0.12,0.98)},anchor=north,font=\tiny},
            legend cell align={left},
            ybar=0.7cm,
            xticklabels={\textbf{data 1 [n=7]}, \textbf{data 2 [n=7]}},
            x tick label style={rotate=45, anchor=north east, inner sep=1mm,font=\small},
            ylabel={\textbf{\small concentration}},
            bar width=1cm,
            grid=none,
            ymin=0,
            ymax=15,
            ]
            
            \addplot[black,thick,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }] 
                plot coordinates {(1, 3.9)+- (1.2,1.2)};
            \addplot[red,thick,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }]  
            plot coordinates {(1, 1.6)+- (0.4,0.4)};
            
        %   \addplot[draw=none]
        %   plot coordinates {(1, 1)};
                    
            \legend{data 1, data 2}
            
            \addplot+[mark=o,only marks,xshift=-1.7cm,black] coordinates
            {(1,4.1) (1,1.2) (1,2.4) (1,13.1) (1,2.5) (1,2.0) (1,1.7)};
            \addplot+[mark=o,only marks,red] coordinates
            {(1,1.1) (1,2.0) (1,3.3) (1,2.5) (1,1.4) (1,2.2) (1,1.2)};          
        \end{axis}
    
    \end{tikzpicture}
\end{document}

答案1

条形图会自动移动,不会重叠。您可以使用 调整其位置bar shift=...

我希望您有充分的理由将绘图移动 1.7 厘米。这是一种非常糟糕的数据移动方式,只会导致问题。

\documentclass[border=0.5cm]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            title=\textbf{Title},
            legend style={at={(0.12,0.98)},anchor=north,font=\tiny},
            legend cell align={left},
            ybar=0.7cm,
            x tick label style={rotate=45, anchor=north east, inner sep=1mm,font=\small},
            ylabel={\textbf{\small concentration}},
            bar width=1cm,
            grid=none,
            ymin=0,
            ymax=15,
            xtick= {-10,1},
            xticklabels={\textbf{data 1 [n=7]}, \textbf{data 2 [n=7]}},
            xmin=-22, xmax=22,
            ]   
            
            \addplot[black,thick, bar shift=-1.7 cm, error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }] 
                plot coordinates {(1, 3.9)+- (1.2,1.2)};
            \addplot[red,thick, bar shift=0 cm, error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }]  
            plot coordinates {(1, 1.6)+- (0.4,0.4)};
            
        %   \addplot[draw=none]
        %   plot coordinates {(1, 1)};
                    
            \legend{data 1, data 2}
            
            \addplot+[mark=o,only marks,xshift=-1.7cm,black] coordinates
            {(1,4.1) (1,1.2) (1,2.4) (1,13.1) (1,2.5) (1,2.0) (1,1.7)};
            \addplot+[mark=o,only marks,red] coordinates
            {(1,1.1) (1,2.0) (1,3.3) (1,2.5) (1,1.4) (1,2.2) (1,1.2)};
        \end{axis}
    
    \end{tikzpicture}
\end{document}

包含两个条形图和两个点的图表

答案2

最后,找到了一个最适合我的解决方案:我ybar从轴环境中删除并添加了xtick= {0,1}, xmin=-1, xmax=2。其余部分请参阅下面的代码。

\documentclass[border=0.5cm]{standalone}

\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            legend style={at={(0.12,0.98)},anchor=north},
            legend cell align={left},
            xticklabels={\textbf{data 1}, \textbf{data 2}},
            x tick label style={rotate=45, anchor=north east, inner sep=1mm},
            ylabel={\textbf{concentration}},
            bar width=1cm,
            grid=none,
            ymin=0,
            ymax=16,
            xtick= {0,1},
            xmin=-1, 
            xmax=2,
            ]
            
            
            \addplot[mark=o,only marks,black] coordinates
            {(0,4.1) (0,1.2) (0,2.4) (0,13.1) (0,2.5) (0,2.0) (0,1.7)};
            \addplot[mark=o,only marks,red] coordinates
            {(1,1.1) (1,2.0) (1,3.3) (1,2.5) (1,1.4) (1,2.2) (1,1.2)};
            
            \addplot[ybar,black,thick,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }] 
            plot coordinates {(0, 4.2)+- (1.8,1.8)};
            \addplot[ybar,red,thick,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt},
            error mark options={
                rotate=90,
                mark size=5pt,
                line width=1pt
            }]  
            plot coordinates {(1, 1.7)+- (0.3,0.3)};
            
            \legend{data 1, data 2}
            
        \end{axis}

    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容