4

I have a problem with formatting the legend correctly. Here is my code:

\begin{figure}[H]
\centering
\begin{tikzpicture}
\pgfplotstableread{
x Order                               m0  m132  m3  m460  m6
0 gtx780-cb-s 0.57615 0.627627 0.394365 0.811266 1.05492
1 gtx780-mu-s 0.141668 0.315022 0.145579 0.202026 0.253015
4 gtx780-cb-d 3.784450 10.841200 5.527380 5.881210 8.342070
5 gtx780-mu-d 0.279953 0.918595 0.340272 0.471707 0.422749
8 k40-cb-s 0.695936 0.831193 0.476254 1.05996 1.26672
9 k40-mu-s 0.193261 0.434555 0.195305 0.303927 0.338011
12 k40-cb-d 1.004380 2.401120 1.314340 1.560650 2.067400
13 k40-mu-d 0.377453 1.200990 0.377581 0.598974 0.674917
}\datatable

\begin{axis}[
    x post scale=\linewidth/\axisdefaultwidth,
    xlabel=Time {[}ms{]},
    ytick=data,
    yticklabels from table={\datatable}{Order},
    xbar stacked,
    xmin=0,
    ymax=15,
    legend style={area legend,at={(0.5,-0.3)},anchor=north,legend columns=-1},
]

\addplot table [x expr={4 * \thisrow{m0}}, y=x] {\datatable};
\addplot table [x=m132, y=x] {\datatable};
\addplot table [x=m3, y=x] {\datatable};
\addplot table [x=m460, y=x] {\datatable};
\addplot table [x=m6, y=x] {\datatable};

\addlegendimage{blue,sharp plot}
\addlegendimage{red,sharp plot}

\draw[blue] (axis cs:1.77394776117234,\pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:1.77394776117234,\pgfkeysvalueof{/pgfplots/xmax});
\draw[red] (axis cs:2.12873731340681,\pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:2.12873731340681,\pgfkeysvalueof{/pgfplots/xmax});

\legend{M0,M132,M3,M460,M6,line1,line2};
\end{axis}
\end{tikzpicture}

\end{figure}

And the output I get is: screen

As you can see the legend is not formatted nicely. I want little color areas for the bars and two lines for the two lines I've added to the plot. Also, how do I bring the lines on top of the bars?

Thanks!

  • 1
    Welcome to the site! Thanks for providing a MWE :) If you add area style to your axis then it seems to fix part of the issue... – cmhughes Apr 8 '14 at 23:41
  • Thank you @cmhughes! adding line legend to the extra legend entries did the trick. The only question I have left is how to bring the lines on top of the bars. – user1096294 Apr 8 '14 at 23:59
4
  1. As cmhughes mentioned in his comment, adding the option area style to the axis environment gives the desired formatting for the legend.

  2. Draw the lines before adding the plots.

The code:

\documentclass{article}
\usepackage{pgfplotstable}

\begin{document}

\begin{figure}[H]
\centering
\begin{tikzpicture}
\pgfplotstableread{
x Order                               m0  m132  m3  m460  m6
0 gtx780-cb-s 0.57615 0.627627 0.394365 0.811266 1.05492
1 gtx780-mu-s 0.141668 0.315022 0.145579 0.202026 0.253015
4 gtx780-cb-d 3.784450 10.841200 5.527380 5.881210 8.342070
5 gtx780-mu-d 0.279953 0.918595 0.340272 0.471707 0.422749
8 k40-cb-s 0.695936 0.831193 0.476254 1.05996 1.26672
9 k40-mu-s 0.193261 0.434555 0.195305 0.303927 0.338011
12 k40-cb-d 1.004380 2.401120 1.314340 1.560650 2.067400
13 k40-mu-d 0.377453 1.200990 0.377581 0.598974 0.674917
}\datatable

\begin{axis}[
    x post scale=\linewidth/\axisdefaultwidth,
    xlabel=Time {[}ms{]},
    ytick=data,
    yticklabels from table={\datatable}{Order},
    xbar stacked,
    xmin=0,
    ymax=15,
    area style,
    legend style={area legend,at={(0.5,-0.3)},anchor=north,legend columns=-1},
]

\draw[blue] (axis cs:1.77394776117234,\pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:1.77394776117234,\pgfkeysvalueof{/pgfplots/xmax});
\draw[red] (axis cs:2.12873731340681,\pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:2.12873731340681,\pgfkeysvalueof{/pgfplots/xmax});

\addplot table [x expr={4 * \thisrow{m0}}, y=x] {\datatable};
\addplot table [x=m132, y=x] {\datatable};
\addplot table [x=m3, y=x] {\datatable};
\addplot table [x=m460, y=x] {\datatable};
\addplot table [x=m6, y=x] {\datatable};

\addlegendimage{blue,sharp plot}
\addlegendimage{red,sharp plot}


\legend{M0,M132,M3,M460,M6,line1,line2};
\end{axis}
\end{tikzpicture}

\end{figure}

\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.