# pgfplots: legendentrys are wrong

I'm using pgfplots to plot a lot of data as you can see below. For some of the plots I'v specified a legendentry, but the marks for these plots are not shown in the legend. does anyone know where the mistake is?

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\usepgflibrary{shapes.geometric}
\usetikzlibrary{patterns,arrows}
\begin{document}

\begin{tikzpicture}
\centering
\begin{axis}[
height=10cm,
width=\columnwidth,
enlarge y limits=0.07,
enlarge x limits=0.03,
legend style={at={(0.5,-0.1)}, anchor=north,legend columns=-1},
%ylabel={Bezugsphoneme: regspr. Vnt. (Hn)},
symbolic x coords={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w},
xtick=data
]

\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=-] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=a] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=aa] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=ai] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=au] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=b] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=o, scale=0.7, draw=black, solid}] table[x=vpid, y=c] {data.dat}; \addlegendentry{c}
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=d] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=triangle, scale=0.8, draw=black, solid}] table[x=vpid, y=ee] {data.dat}; \addlegendentry{ee}
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=schwa] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=E] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=EE] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=f] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=g] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=ii] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=i] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=k] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=m] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=n] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=ng] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=oo] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=oe] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=oee] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=o] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=oi] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=p] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=pf] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=square, scale=0.7, draw=black, solid}] table[x=vpid, y=r] {data.dat}; \addlegendentry{r}
\addplot+[sharp plot, only marks, mark options={mark=diamond, scale=0.8, draw=black, solid}] table[x=vpid, y=s] {data.dat}; \addlegendentry{s}
\addplot+[sharp plot, only marks, mark options={mark=pentagon, scale=0.8, draw=black,solid}] table[x=vpid, y=sch] {data.dat}; \addlegendentry{sch}
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=t] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=ts] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=uu] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=u] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=v] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=uee] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=ue] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=z] {data.dat};
\addplot+[sharp plot, only marks, mark options={mark=-, scale=0.8, draw=black}] table[x=vpid, y=sth_sch] {data.dat};

\end{axis}
\end{tikzpicture}
\end{document}


The data table:

vpid    -   a   aa  ai  au  b   c   d   ee  schwa   E   EE  f   g   ii  i   k   m   n   ng  oo  oe  oee o   oi  p   pf  r   s   sch t   ts  uu  u   v   uee ue  z   sth_sch
a   4   17  6   8   2   10  28  10  33  6   0   0   3   17  23  4   2   1   14  0   5   0   0   20  0   0   0   79  1   18  10  0   0   3   7   1   0   13  0
b   0   11  2   4   1   2   33  0   24  3   2   0   0   2   12  6   5   0   62  0   5   0   0   1   0   7   2   50  2   22  36  0   0   4   10  0   0   2   0
c   1   12  2   3   1   5   11  1   33  3   4   0   0   6   12  11  2   0   17  0   7   1   0   1   0   6   0   56  3   7   17  0   0   16  28  1   1   3   0
d   0   18  1   6   4   6   56  7   58  6   3   0   4   15  18  15  4   1   27  0   1   1   0   3   0   12  0   74  45  29  29  0   0   8   17  1   0   24  2
e   0   16  1   3   1   8   46  9   35  6   6   0   3   18  11  5   0   0   21  0   2   0   1   22  0   5   2   78  2   47  14  0   1   9   1   0   0   3   2
f   0   1   1   10  2   10  68  7   35  2   5   0   2   7   10  9   0   0   15  0   0   0   0   4   0   3   2   65  24  30  40  0   0   10  1   0   0   1   0
g   4   28  16  40  3   26  49  16  27  10  3   0   5   19  40  40  4   0   24  1   8   0   0   7   0   3   3   71  52  24  19  0   2   5   15  2   2   14  0
h   0   4   1   1   4   5   56  4   29  1   3   0   5   7   19  9   1   1   10  0   0   1   0   2   0   4   2   35  15  35  26  0   2   5   3   0   0   5   0
i   1   10  2   5   5   2   111 8   27  0   2   0   0   11  16  17  1   1   13  0   4   0   0   7   0   1   2   48  30  37  16  0   2   8   5   0   0   2   0
j   0   13  1   5   5   2   95  5   36  2   1   0   1   3   21  20  0   6   11  0   1   0   0   6   0   4   1   43  21  15  15  0   0   4   7   0   0   8   0
k   0   9   9   7   9   12  76  7   41  4   2   0   8   11  31  15  4   0   16  0   12  0   0   4   0   7   2   82  27  43  10  0   0   3   10  0   0   5   0
l   0   12  6   11  8   6   64  9   35  2   4   0   11  15  33  19  1   1   17  0   18  0   0   6   0   3   1   63  44  15  23  0   0   9   27  0   0   31  0
m   0   30  4   3   4   10  64  7   48  6   2   0   3   8   20  8   0   0   26  0   11  1   0   9   0   2   0   115 0   66  13  0   0   14  6   0   0   15  0
n   0   17  0   8   4   6   65  7   33  3   4   0   4   9   22  6   5   3   9   0   7   0   1   4   0   2   2   59  24  44  18  0   1   2   3   0   0   6   0
o   0   1   1   0   3   12  77  5   30  2   3   0   1   10  15  6   0   0   7   0   2   0   0   1   0   4   0   51  0   45  21  0   1   5   3   1   0   2   0
p   0   28  4   6   5   6   41  8   38  1   0   0   2   4   43  3   1   0   17  0   3   0   0   4   0   4   0   65  2   35  26  0   1   2   21  0   0   3   3
q   0   14  3   4   6   2   60  2   30  2   3   0   6   13  29  2   0   1   9   0   3   0   0   3   0   4   2   66  0   38  10  0   0   6   14  0   0   8   0
r   0   40  7   5   5   5   109 13  43  3   2   0   5   17  30  25  1   1   14  0   3   0   0   13  0   4   0   74  71  32  22  0   6   2   22  0   0   4   0
s   1   12  1   2   2   17  41  14  26  2   0   0   3   18  22  5   0   0   11  0   3   0   0   7   0   1   1   62  4   41  8   0   2   4   1   0   0   6   1
t   6   81  44  16  6   20  111 23  31  29  6   0   3   34  70  61  3   0   8   0   24  0   0   13  3   6   3   95  102 52  56  0   18  5   35  6   1   8   0
u   0   19  5   4   17  15  114 22  38  2   8   0   5   8   24  16  1   0   10  0   13  0   0   7   0   2   0   82  25  61  25  0   0   0   11  0   0   13  0
v   0   25  7   6   11  20  142 7   21  6   4   0   7   21  45  15  3   1   12  0   13  0   0   5   0   0   0   52  24  23  37  0   2   6   11  0   0   16  0
w   0   24  1   6   14  6   74  14  15  3   3   0   11  12  22  2   5   1   3   0   7   0   0   6   0   2   0   46  0   35  17  0   1   2   8   0   0   14  0

-

Instead of reordering the plots, you can also supply forget plot to those series that will not get an entry in the legend.

For complicated plots like yours, it's best to work with styles. I've adjusted your example a bit:

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\usepgflibrary{shapes.geometric}
\begin{document}

\begin{tikzpicture}
\centering
\begin{axis}[
height=10cm,
width=\columnwidth,
enlarge y limits={upper, value=0.07},
enlarge x limits=0.03,
legend style={
at={(0.5,-0.1)},
anchor=north, %Proper alignment
nodes={anchor=mid},
legend columns=-1,
/tikz/every even column/.append style={column sep=4pt} %Increase spacing in legend
},
symbolic x coords={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w},
xtick=data,
xticklabel style={text height=1.5ex}, % To get proper alignment
only marks,
every axis plot post/.style={draw=black}, %Common options
other/.style={
forget plot,
mark options={
mark=-, scale=0.8
}
},
c plot/.style={
mark options={mark=o, scale=0.7, solid}
},
ee plot/.style={
mark options={mark=triangle, scale=0.8, solid}
},
r plot/.style={
mark options={mark=square, scale=0.7, solid}
},
s plot/.style={
mark options={mark=diamond, scale=0.8, solid}
},
sch plot/.style={
mark options={mark=pentagon, scale=0.8,solid}
}
]

\end{axis}
\end{tikzpicture}
\end{document}

-
Hi Jake! Thanks again for your really nice work, I'm learning a lot from your examples. I had migrated the styles to my original plot, but now I the effect of \addlegendimage{other} is nothing. The "other"-style is not plotted in the legend. Do you have some ideas on that? –  MaKa TaBo Dec 8 '11 at 22:39
Glad it helps! Hm, not sure about the missing entry for other. Probably best to post a new question with an example. –  Jake Dec 8 '11 at 22:50
I tried Jake's example and the entry for other is present and seems to be ok.... are you sure you added both \addlegendimage and \addlegendentry? –  Christian Feuersänger Dec 10 '11 at 9:04

That is because \addlegendentry makes a list which is constructed from the number of calls to that command. This means that the first call to \addlegendentry applies to the first \addplot, the second call of \addlegendentry applies to the second \addplot. No matter the location of the command itself.
What you need to do is assemble all your \addplots to the \addlegendentry calls.

Effectively:

\begin{axis}
\addplot+[sharp plot, only marks, mark options={mark=o, scale=0.7, draw=black, solid}] table[x=vpid, y=c] {data.dat}; \addlegendentry{c}
\addplot+[sharp plot, only marks, mark options={mark=triangle, scale=0.8, draw=black, solid}] table[x=vpid, y=ee] {data.dat}; \addlegendentry{ee}
\addplot+[sharp plot, only marks, mark options={mark=square, scale=0.7, draw=black, solid}] table[x=vpid, y=r] {data.dat}; \addlegendentry{r}
\addplot+[sharp plot, only marks, mark options={mark=diamond, scale=0.8, draw=black, solid}] table[x=vpid, y=s] {data.dat}; \addlegendentry{s}
\addplot+[sharp plot, only marks, mark options={mark=pentagon, scale=0.8, draw=black,solid}] table[x=vpid, y=sch] {data.dat}; \addlegendentry{sch}
....
<other>
\end{axis}

-