[Tex/LaTex] Pgfplots not plotting bar graph with all symbolic coordinates

pgfplotstikz-pgf

I am trying to create a bar graph using pgfplots. Specifically, I have 8 different bins of varying signal length against some computational time. I have set the x axis signal lengths to symbolic coordinates and have those plotted against time. The resultant graph however, does not seem to plot the last "bin" of times (i.e signal length of 32768).

I have the code attached below:

\begin{figure}[htbp]
\centering
\Dshadowbox{
\begin{tikzpicture}[scale=1]
\begin{axis}[
    x tick label style={
        /pgf/number format/1000 sep=},
    ylabel=\textbf{Computation Time} $\mathbf{s}$,
    xlabel=\textbf{Signal Length $\mathbf{N}$},
    xtick=data,
    symbolic x coords = {256,512,1024,2048,4096,8192,16384,32768},
    ybar interval=0.8,
    xtick={256,512,1024,2048,4096,8192,16384,32768},
    bar width = 10pt,
    ymode=log,
    bar shift=0pt,
    log origin=infty,
    width=\textwidth
        ]
\addplot 
    coordinates {(256,0.0202) (512,0.0445)
         (1024,0.1578) (2048,0.5877)  (4096,3.5797) (8192,18.8230) (16384,103.7727) (32768,762.0937)};

\addplot
    coordinates {(256,0.0012) (512,0.0034) 
        (1024,0.0106) (2048,0.0229) (4096,0.1045) (8192,0.4693) (16384,3.0236) (32768,22.8810)};

\addplot
    coordinates {(256,0.0009) (512,0.0013) 
        (1024,0.0027) (2048,0.0059) (4096,0.220) (8192,0.0858) (16384,0.3697) (32768,3.7458)};

\addplot
    coordinates {(256,0.0028) (512,0.0032) 
        (1024,0.0052) (2048,0.0168) (4096,0.0638) (8192,0.2927) (16384,1.4904) (32768,9.21)};

\addplot 
    coordinates {(256,0.0011) (512,0.0019) 
        (1024,0.0085) (2048,0.0486) (4096,0.1973) (8192,0.6917) (16384,3.2107) (32768,17.1235)};

\addplot 
    coordinates {(256,0.00006) (512,0.00014) 
        (1024,0.00022) (2048,0.00047) (4096,0.0019) (8192,0.0085) (16384,0.3123) (32768,5.9074)};
\end{axis}
\end{tikzpicture}
}
\end{figure}

I'm sure I have made a silly error somewhere but haven't been able to see it as of yet. Any help on the matter would be much appreciated.

Best Answer

You need an extra coordinates for each addplot, since ybar interval=0.8 is used; therefore 8 coordinates only generates 7 ybar because an interval is defined by two coordinates. The last coordinate will only be used to determine the interval width; its y value doesn't change the bar appearance. Here (65536,0.1) is appended as a dummy coordinate to serve as the horizontal end point. Since the OP did not provide \Dshadowbox, it is therefore disable to make a run.

As a side note, if ybar interval=0.8 is removed, (that is no ybar interval plot) then the last coordinate (32768,y) will show.

enter image description here

Code

\documentclass[border=2cm]{standalone}
\usepackage{graphicx}
\usepackage{pgfplots}



\pgfplotsset{compat=1.8}


\begin{document}

%\begin{figure}[htbp]
%\centering
%\Dshadowbox{
\begin{tikzpicture}[scale=1]
\begin{axis}[
    x tick label style={
        /pgf/number format/1000 sep=},
    ylabel=\textbf{Computation Time} $\mathbf{s}$,
    xlabel=\textbf{Signal Length $\mathbf{N}$},
    xtick=data,
    symbolic x coords = {256,512,1024,2048,4096,8192,16384,32768,65536},
    ybar interval=0.8,
    xtick={256,512,1024,2048,4096,8192,16384,32768,65536},
    bar width = 10pt,
    ymode=log,
    bar shift=0pt,
    log origin=infty,
    width=\textwidth
        ]
\addplot 
    coordinates {(256,0.0202) (512,0.0445)
         (1024,0.1578) (2048,0.5877)  (4096,3.5797) (8192,18.8230) (16384,103.7727) (32768,762.0937)(65536,0.1)};

\addplot
    coordinates {(256,0.0012) (512,0.0034) 
        (1024,0.0106) (2048,0.0229) (4096,0.1045) (8192,0.4693) (16384,3.0236) (32768,22.8810)(65536,0.1)};

\addplot
    coordinates {(256,0.0009) (512,0.0013) 
        (1024,0.0027) (2048,0.0059) (4096,0.220) (8192,0.0858) (16384,0.3697) (32768,3.7458)(65536,0.1)};

\addplot
    coordinates {(256,0.0028) (512,0.0032) 
        (1024,0.0052) (2048,0.0168) (4096,0.0638) (8192,0.2927) (16384,1.4904) (32768,9.21)(65536,0.1)};

\addplot 
    coordinates {(256,0.0011) (512,0.0019) 
        (1024,0.0085) (2048,0.0486) (4096,0.1973) (8192,0.6917) (16384,3.2107) (32768,17.1235)(65536,0.1)};

\addplot 
    coordinates {(256,0.00006) (512,0.00014) 
        (1024,0.00022) (2048,0.00047) (4096,0.0019) (8192,0.0085) (16384,0.3123) (32768,5.9074)(65536,0.1)};
\end{axis}
\end{tikzpicture}
%}
%\end{figure}

\end{document}