# Using a pgfplots-style legend in a plain-old tikzpicture

I am using a plain-old tikzpicture to produce a pie-chart-like plot. Now, all other plots in my paper are handled using pgfplots (which doesn't do pie charts) and have their legend typeset by pgfplots.

It would thus be great if it were possible to create, re-using as many keys like /pgfplots/area legend as possible, to create a pgfplots-style legend in TiKZ. Has anyone done anything like this before?

-
Would you mind uploading an example of how you create your pie charts? –  Jake May 7 '12 at 15:28
I don't use any special package for that; just plain-old tikzpicture \filldraw and arc paths. (No package could easily do what I wanted to out of the box: a pie chart within a ring chart; sort of like a pie with a crust.) –  Andreas May 8 '12 at 7:20

Pgfplots has a couple of helper methods which do the job - and these methods are mostly independent of any axis. The only required things are the text labels and the styles for the individual images.

Here is a short draft which might do what you want:

\documentclass{article}

\usepackage{pgfplots}

% argument #1: any options
\newenvironment{customlegend}[1][]{%
\begingroup
% inits/clears the lists (which might be populated from previous
% axes):
\csname pgfplots@init@cleared@structures\endcsname
\pgfplotsset{#1}%
}{%
% draws the legend:
\csname pgfplots@createlegend\endcsname
\endgroup
}%

% makes \addlegendimage available (typically only available within an
% axis environment):

\begin{document}

\thispagestyle{empty}

\begin{tikzpicture}
\begin{customlegend}[legend entries={$a$,$e^x$,C,$d$}]
\end{customlegend}
\end{tikzpicture}

\end{document}


The different \addlegendimage styles are a little bit ... inconsistent, but I wanted to experiment if they work. I guess that mesh legend might produce problems, so stick to the simpler ones...

-
Works like a charm. –  Andreas May 8 '12 at 8:17
This is really nice. I just don't know how I position the legend in the tikzpicture at the right spot. Tried to put it into a node, but got an error. Is there a general way to position something? –  Jana Jul 4 '12 at 13:52
@Jana it is placed using the legend keys, i.e. add legend style={at={(0.5,0.5)},anchor=center} to the option list. Perhaps you can also omit the outer legend style and write at=... immediately. –  Christian Feuersänger Jul 7 '12 at 20:44
If I'm not mistaken, this positioning using legend style={at={(0.5,0.5)},anchor=center} is to position the legend as if it was inside an axis environment. How should be done in order to position the legend using global coordinates of the tikz? Lets say that the legend should be a node positioned at (100,100) –  Sik Jun 16 at 6:28
at={(100,100)} should work. –  Christian Feuersänger Jun 16 at 18:07

And here is how to put a non-pgfplots style legend into pgfplots.

\documentclass{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=10,ymin=-5,ymax=5,name=border]
\end{axis}

\node[below left=1mm] at (border.north east) {\fbox{
\begin{tabular}{@{}r@{ }l@{}}
\raisebox{2pt}{\tikz{\draw[black] (0,0) -- (5mm,0);}}&black\\
\raisebox{2pt}{\tikz{\draw[red] (0,0) -- (5mm,0);}}&red\\
\raisebox{2pt}{\tikz{\draw[green] (0,0) -- (5mm,0);}}&green\\
\raisebox{2pt}{\tikz{\draw[blue] (0,0) -- (5mm,0);}}&blue\\
\end{tabular}}};

\end{tikzpicture}
\end{document}


-