두 막대 그래프의 막대를 수평으로 정렬하려면 어떻게 해야 합니까?

두 막대 그래프의 막대를 수평으로 정렬하려면 어떻게 해야 합니까?

아래 그림의 두 막대 그래프의 클러스터를 정렬하고 싶습니다.

예를 들어, 두 번째 막대에 있는 "Program-2" 클러스터가 첫 번째 막대 그래프의 "Program-2" 클러스터 바로 아래에 표시되고 두 번째 막대 그래프에 표시되지 않는 클러스터의 경우 위치만 나타나기를 원합니다. 비어 있습니다(라벨도 없음). 그게 가능합니까? 어떻게 해야 합니까?

여기에 이미지 설명을 입력하세요

다음은 최소 샘플입니다.

\documentclass{standalone}

\usepackage{tikz,pgfplots}
    \usepgfplotslibrary{groupplots}
    \usetikzlibrary{calc}

% Define bar chart colors
%
\definecolor{corA}{HTML}{666666}
\definecolor{corB}{HTML}{00FF84}
\definecolor{corC}{HTML}{00994D}
\definecolor{corD}{HTML}{00DD6F}


\pgfplotsset{compat=1.9}
\usetikzlibrary{patterns}


\begin{document}
    \begin{tikzpicture}
        \begin{groupplot}[
            ybar,
            group style         =   {   
                group size      =   1 by 2,
                vertical sep    =   5.5cm 
            },
            ymajorgrids         =   true,
            enlarge x limits    = 0.03,
            ymin                = 0,
            ymax                = 2,
            width       = 3.00*\textwidth,
            height      = 8cm,
            major x tick style   = transparent,
            ybar = 2*\pgflinewidth,
            xtick=data,
            y tick label style= {
                font=\Large 
            },
            x tick label style= {
                rotate=90,
                anchor=east,
                font=\Large
            },
            symbolic x coords = {            ,-,
                                    Program-1,
                                    Program-2,
                                    Program-14,
                                    Program-3,
                                    Program-8,
                                    Program-9,
                                    Program-10,
                                    Program-16,
                                    Program-4,
                                    Program-5,
                                    Program-15,
                                    Program-6,
                                    Program-7,
                                    Program-13,
                                    Program-11,
                                    Program-12,
                                },
            legend cell align    = left,
            legend columns       = 4,
            legend image code/.code={%
                \draw[#1] (-0.1cm,-0.1cm) rectangle (0.10cm,0.2cm);
            },
            legend style         = {
                at={(0.800, 2.80)},
                anchor=north,
                column sep=1ex
            }
        ]


        %  First Part  First Part  First Part  First Part  First Part First Part 
        %  First Part  First Part  First Part  First Part  First Part First Part 
        %  First Part  First Part  First Part  First Part  First Part First Part 
        %  First Part  First Part  First Part  First Part  First Part First Part 
        %  First Part  First Part  First Part  First Part  First Part First Part 
        %  First Part  First Part  First Part  First Part  First Part First Part 
        \nextgroupplot[ylabel style={font=\huge}, ylabel={Results of xyz}]


        %%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do A
        \addplot[style={corA, fill=corA, mark=none}]
            coordinates {   
                (Program-1,             1.03)
                (Program-2,             1.60)
                (Program-14,            1.00)
                (Program-3,         2.00)
                (Program-16,                0.91)
                (Program-4,                 0.91)
                (Program-5,                 1.00)
                (Program-15,                    1.41)
                (Program-6,                 1.60)
                (Program-7,                     1.55)
                (Program-8,             1.02)
                (Program-9,                 1.00)
                (Program-10,                1.00)
                (Program-13,            1.05)
                (Program-11,            1.23)
                (Program-12,            1.78)
            };

        %%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do B
        \addplot[style={corB,fill=corB,mark=none}]
             coordinates {
                (Program-1,             0.92)
                (Program-2,             1.60)
                (Program-14,            1.08)
                (Program-3,         1.00)
                (Program-16,                0.18)
                (Program-4,                 0.20)
                (Program-5,                 0.26)
                (Program-15,                    0.89)
                (Program-6,                 0.52)
                (Program-7,                     0.39)
                (Program-8,             1.02)
                (Program-9,                 1.00)
                (Program-10,                1.00)
                (Program-13,            0.62)
                (Program-11,            0.66)
                (Program-12,            0.71)
            };


        %%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do C
        \addplot [style={corC,fill=corC,mark=none}]
             coordinates {
                (Program-1,             1.03)
                (Program-2,             1.60)
                (Program-14,            1.00)
                (Program-3,         2.00)
                (Program-16,                0.07)
                (Program-4,                 0.09)
                (Program-5,                 0.38)
                (Program-15,                    0.49)
                (Program-6,                 0.73)
                (Program-7,                     0.52)
                (Program-8,             1.02)
                (Program-9,                 1.00)
                (Program-10,                1.00)
                (Program-13,            0.14)
                (Program-11,            0.16)
                (Program-12,            0.21)
            };

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do C Unrolled
        \addplot [style={corD,fill=corD,mark=none}]
             coordinates {
                (Program-1,             1.03)
                (Program-2,             1.60)
                (Program-14,            1.00)
                (Program-3,         2.00)
                (Program-16,                0.40)
                (Program-4,                 0.46)
                (Program-5,                 0.83)
                (Program-15,                    1.42)
                (Program-6,                 1.45)
                (Program-7,                     1.55)
                (Program-8,             1.02)
                (Program-9,                 1.00)
                (Program-10,                1.02)
                (Program-13,            0.72)
                (Program-11,            0.97)
                (Program-12,            1.39)
            };

















































        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        %  Second Part  Second Part  Second Part  Second Part  Second Part Second Part 
        \nextgroupplot[ylabel style={font=\huge}, ylabel={Results of ijk}]




        %%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do A
        \addplot[style={corA, fill=corA, mark=none}, x tick style={blue}]
            coordinates {
                (Program-1,     0.00)
                (Program-2,     1.46)
                (Program-3,     1.04)
                (Program-4,     1.15)
                (Program-5,     0.88)
                (Program-6,     0.95)
                (Program-7,     1.41)
                (Program-8,     1.07)
                (Program-9,     1.04)
                (Program-10,    1.00)
                (Program-11,    1.30)
                (Program-12,    1.38)
            };

        %%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do B
        \addplot[style={corB,fill=corB,mark=none}]
             coordinates {
                (Program-2,             1.49)
                (Program-3,         1.05)
                (Program-4,                 0.85)
                (Program-5,                 0.83)
                (Program-6,                 0.87)
                (Program-7,                     1.09)
                (Program-8,             1.06)
                (Program-9,                 1.01)
                (Program-10,                0.99)
                (Program-11,            0.69)
                (Program-12,            0.69)
            };


        %%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do C
        \addplot [style={corC,fill=corC,mark=none}]
             coordinates {
                (Program-2,         1.34)
                (Program-3,         1.04)
                (Program-4,         0.46)
                (Program-5,         0.60)
                (Program-6,         0.95)
                (Program-7,         1.41)
                (Program-8,         1.03)
                (Program-9,         0.96)
                (Program-10,        0.98)
                (Program-11,        0.52)
                (Program-12,        0.56)
            };

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%% Resultados do C Unrolled
        \addplot [style={corD,fill=corD,mark=none}]
             coordinates {
                (Program-2,         1.34)
                (Program-3,         1.04)
                (Program-4,         0.85)
                (Program-5,         0.83)
                (Program-6,         0.95)
                (Program-7,         1.41)
                (Program-8,         1.04)
                (Program-9,         1.04)
                (Program-10,        1.00)
                (Program-11,        0.88)
                (Program-12,        0.95)
            };

        \legend{A, B, C, D}

        \end{groupplot}

    \end{tikzpicture}
\end{document}

답변1

원하는 결과를 얻으려면 코드에서 두 줄만 변경하면 됩니다.

  1. xmin={[normalized]2]}두 번째 옵션에 추가하고 \nextgroupplot( [normalize]사용 중이므로 필요함 symbolic x coords)
  2. 두 번째 의 (Program-1,0.00)첫 번째 줄을 제거하거나 주석 처리합니다 .\addplot\nextgroupplot

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{groupplots}
    % Define bar chart colors
    \definecolor{corA}{HTML}{666666}
    \definecolor{corB}{HTML}{00FF84}
    \definecolor{corC}{HTML}{00994D}
    \definecolor{corD}{HTML}{00DD6F}
    \pgfplotsset{compat=1.3}
\begin{document}
    \begin{tikzpicture}
        \begin{groupplot}[
            ybar,
            group style         =   {
                group size      =   1 by 2,
                vertical sep    =   3.5cm
            },
            ymajorgrids         = true,
            enlarge x limits    = 0.03,
            ymin                = 0,
            ymax                = 2,
            width       = 3.00*\textwidth,
            height      = 8cm,
            ybar = 2*\pgflinewidth,
            xtick=data,
            y tick label style= {
                font=\Large
            },
            x tick label style= {
                rotate=90,
                anchor=east,
                font=\Large
            },
            symbolic x coords = {   ,-,
                                    Program-1,
                                    Program-2,
                                    Program-14,
                                    Program-3,
                                    Program-8,
                                    Program-9,
                                    Program-10,
                                    Program-16,
                                    Program-4,
                                    Program-5,
                                    Program-15,
                                    Program-6,
                                    Program-7,
                                    Program-13,
                                    Program-11,
                                    Program-12,
                                },
            legend cell align    = left,
            legend columns       = 4,
            legend image code/.code={%
                \draw[#1] (-0.1cm,-0.1cm) rectangle (0.10cm,0.2cm);
            },
            legend style         = {
                at={(0.800, 2.50)},
                anchor=north,
                column sep=1ex
            }
        ]

        \nextgroupplot[ylabel style={font=\huge}, ylabel={Results of xyz}]
            \addplot[style={corA, fill=corA, mark=none}]
                coordinates {
                    (Program-1,         1.03)
                    (Program-2,         1.60)
                    (Program-14,        1.00)
                    (Program-3,         2.00)
                    (Program-16,        0.91)
                    (Program-4,         0.91)
                    (Program-5,         1.00)
                    (Program-15,        1.41)
                    (Program-6,         1.60)
                    (Program-7,         1.55)
                    (Program-8,         1.02)
                    (Program-9,         1.00)
                    (Program-10,        1.00)
                    (Program-13,        1.05)
                    (Program-11,        1.23)
                    (Program-12,        1.78)
                };
            \addplot[style={corB,fill=corB,mark=none}]
                 coordinates {
                    (Program-1,         0.92)
                    (Program-2,         1.60)
                    (Program-14,        1.08)
                    (Program-3,         1.00)
                    (Program-16,        0.18)
                    (Program-4,         0.20)
                    (Program-5,         0.26)
                    (Program-15,        0.89)
                    (Program-6,         0.52)
                    (Program-7,         0.39)
                    (Program-8,         1.02)
                    (Program-9,         1.00)
                    (Program-10,        1.00)
                    (Program-13,        0.62)
                    (Program-11,        0.66)
                    (Program-12,        0.71)
                };
            \addplot [style={corC,fill=corC,mark=none}]
                 coordinates {
                    (Program-1,         1.03)
                    (Program-2,         1.60)
                    (Program-14,        1.00)
                    (Program-3,         2.00)
                    (Program-16,        0.07)
                    (Program-4,         0.09)
                    (Program-5,         0.38)
                    (Program-15,        0.49)
                    (Program-6,         0.73)
                    (Program-7,         0.52)
                    (Program-8,         1.02)
                    (Program-9,         1.00)
                    (Program-10,        1.00)
                    (Program-13,        0.14)
                    (Program-11,        0.16)
                    (Program-12,        0.21)
                };
            \addplot [style={corD,fill=corD,mark=none}]
                 coordinates {
                    (Program-1,         1.03)
                    (Program-2,         1.60)
                    (Program-14,        1.00)
                    (Program-3,         2.00)
                    (Program-16,        0.40)
                    (Program-4,         0.46)
                    (Program-5,         0.83)
                    (Program-15,        1.42)
                    (Program-6,         1.45)
                    (Program-7,         1.55)
                    (Program-8,         1.02)
                    (Program-9,         1.00)
                    (Program-10,        1.02)
                    (Program-13,        0.72)
                    (Program-11,        0.97)
                    (Program-12,        1.39)
                };

        \nextgroupplot[
            ylabel style={font=\huge},
            ylabel={Results of ijk},
            xmin={[normalized]2},               % <-- added this line
        ]
            \addplot[style={corA, fill=corA, mark=none}, x tick style={blue}]
                coordinates {
%                    (Program-1,     0.00)      % <-- commented this line
                    (Program-2,     1.46)
                    (Program-3,     1.04)
                    (Program-4,     1.15)
                    (Program-5,     0.88)
                    (Program-6,     0.95)
                    (Program-7,     1.41)
                    (Program-8,     1.07)
                    (Program-9,     1.04)
                    (Program-10,    1.00)
                    (Program-11,    1.30)
                    (Program-12,    1.38)
                };
            \addplot[style={corB,fill=corB,mark=none}]
                 coordinates {
                    (Program-2,         1.49)
                    (Program-3,         1.05)
                    (Program-4,         0.85)
                    (Program-5,         0.83)
                    (Program-6,         0.87)
                    (Program-7,         1.09)
                    (Program-8,         1.06)
                    (Program-9,         1.01)
                    (Program-10,        0.99)
                    (Program-11,        0.69)
                    (Program-12,        0.69)
                };
            \addplot [style={corC,fill=corC,mark=none}]
                 coordinates {
                    (Program-2,         1.34)
                    (Program-3,         1.04)
                    (Program-4,         0.46)
                    (Program-5,         0.60)
                    (Program-6,         0.95)
                    (Program-7,         1.41)
                    (Program-8,         1.03)
                    (Program-9,         0.96)
                    (Program-10,        0.98)
                    (Program-11,        0.52)
                    (Program-12,        0.56)
                };
            \addplot [style={corD,fill=corD,mark=none}]
                 coordinates {
                    (Program-2,         1.34)
                    (Program-3,         1.04)
                    (Program-4,         0.85)
                    (Program-5,         0.83)
                    (Program-6,         0.95)
                    (Program-7,         1.41)
                    (Program-8,         1.04)
                    (Program-9,         1.04)
                    (Program-10,        1.00)
                    (Program-11,        0.88)
                    (Program-12,        0.95)
                };

            \legend{A, B, C, D}
        \end{groupplot}
    \end{tikzpicture}
\end{document}

위 코드의 결과를 보여주는 이미지

관련 정보