\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}