如何减少不同图之间的分离?条形图 pgfplots

如何减少不同图之间的分离?条形图 pgfplots
\usepackage{pgfplots}
\usepackage{amsmath}
\include{macros/style}
\include{macros/use_packages}
\usepackage{indentfirst}
\usepackage{graphicx}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{tikz}
\usepackage{array,booktabs,ragged2e}
\usepackage{listings}
\usepackage{color}
\section{Results}
\pgfplotstableread[row sep=\\,col sep=&]{
interval & carT & carD & carC & carG\\
10 Hz     & 62680  & 125130 & 10000 & 100000\\
OSC     & 62680  & 125130 & 100000 & 100000\\
Adaptive     & 62680  & 125130 & 1000000 & 1000000\\
}\mydata

\begin{tikzpicture}
\hspace{-2cm}
\begin{axis}[
        ybar,
        bar width=17pt,
        x=7cm,
        ybar=1pt,
        width=1\textwidth,
        height=.5\textwidth,
        legend style={at={(0.5,1)},
            anchor=north,legend columns=-1},
        symbolic x coords={10 Hz, OSC, Adaptive},
        xtick=data,
        nodes near coords,
        nodes near coords align={horizontal},
        ymin=0,ymax=400000,
        ylabel={Number of Packets Sent},
    ]
    \addplot table[x=interval,y=carT]{\mydata};
    \addplot table[x=interval,y=carD]{\mydata};
    \addplot table[x=interval,y=carC]{\mydata};
    \addplot table[x=interval,y=carG]{\mydata};
    \legend{Six Lanes, 12 Lanes, E.C. Row, i75}
\end{axis}
\end{tikzpicture}

在此处输入图片描述

答案1

对我来说,一个好的解决方案的关键是使用轴坐标系将绝对宽度(以 pt 为单位)切换到相对宽度。这样做的好处是,一旦您固定了 sbar width和“条形到轴的距离”(使用enlarge x limits),您就可以仅使用 来缩放您的图width

有关详细信息,请查看代码中的注释。

% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
    \pgfplotsset{
        % use this `compat' level or higher to use the feature of specifying
        % `bar width' in axis units
        compat=1.7,
    }
    \pgfplotstableread[row sep=\\,col sep=&]{
        interval & carT  & carD   & carC    & carG    \\
        10 Hz    & 62680 & 125130 & 10000   & 100000  \\
        OSC      & 62680 & 125130 & 100000  & 100000  \\
        Adaptive & 62680 & 125130 & 1000000 & 1000000 \\
    }\mydata
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        % it doesn't make sense to specify `x' AND `width', because only
        % one of them can be used. Here `x' would make the race.
%        x=7cm,
        width=1\textwidth,
        height=.5\textwidth,
        ymin=0,
        ymax=400000,
        ylabel={Number of Packets Sent},
        xtick=data,
        % ---------------------------------------------------------------------
        % replace `symbolic x coords' by `xticklabels from table' (step 1)
        % (and do step 2 which is given at the `\addplot's)
%        symbolic x coords={10 Hz, OSC, Adaptive},
        xticklabels from table={\mydata}{interval},
        ybar,
        % when not using symbolic coords we have the opportunity to specify
        % `bar width' in axis units ...
        bar width=0.2,
        ybar=1pt,
        % ... and then we can also give an absolute value for `enlarge x limits'
        enlarge x limits={abs=0.5},
        % Now you can change `width' as you like and don't need to tough
        % here, because everything is given "relative"
        % ---------------------------------------------------------------------
        nodes near coords,
        legend style={
            at={(0.5,1)},
            anchor=north,
            legend columns=-1,
        },
    ]
        % replaced `x=interval' with `x expr=\coordindex' (step 2)
        % to have the same result as using `symbolic x coords'
        \addplot table [x expr=\coordindex,y=carT]{\mydata};
        \addplot table [x expr=\coordindex,y=carD]{\mydata};
        \addplot table [x expr=\coordindex,y=carC]{\mydata};
        \addplot table [x expr=\coordindex,y=carG]{\mydata};

        \legend{Six Lanes, 12 Lanes, E.C. Row, i75}
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

答案2

我将按照以下方式绘制此图:

在此处输入图片描述

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.15}
\pgfplotstableread[row sep=\\,col sep=&]{
    interval & carT  & carD   & carC    & carG    \\
    10 Hz    & 62680 & 125130 & 10000   & 100000  \\
    OSC      & 62680 & 125130 & 100000  & 100000  \\
    Adaptive & 62680 & 125130 & 1000000 & 1000000 \\
}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
     width=1\textwidth,
    height=.5\textwidth,
    ymin=0,
    ymax=1 150 000,
    yticklabel style={/pgf/number format/fixed},
    ytick distance=200 000,
    axis y discontinuity=crunch,
    ylabel={Number of Packets Sent},
    xtick=data,
    xticklabels from table={\mydata}{interval},
    bar width=0.2,
    ybar=2pt,
    enlarge x limits={abs=0.55},
    nodes near coords,
    nodes near coords style={font=\tiny},
    /pgf/number format/.cd,use comma,sci,
    /pgf/number format/sci generic={mantissa sep={\!\!\cdot\!\!},
                                    exponent={10^{####1}}
                                    },
    legend pos=north west,
    legend style={legend columns=-1},
]
    \addplot table [x expr=\coordindex,y=carT]{\mydata};
    \addplot table [x expr=\coordindex,y=carD]{\mydata};
    \addplot table [x expr=\coordindex,y=carC]{\mydata};
    \addplot table [x expr=\coordindex,y=carG]{\mydata};

    \legend{Six Lanes, 12 Lanes, E.C. Row, i75}
\end{axis}
\end{tikzpicture}
\end{document}

相关内容