Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I have a plot created using pgfplots in which I have included a legend. However, I find that the marker sizes in the legend are the same size as the markers used in the main plot. I think this is a bit distracting, and I usually prefer markers in the legend to be slightly smaller than markers in the main plot. (Similarly, legend text to be smaller than labels).

The manual says that the legend is implemented as a TikZ matrix; however, I couldn't figure out how to change the marker symbol sizes selectively. My current line in the code that determiens legend style is:

legend style={draw=black,rounded corners=3pt,thin,at={(0.03,0.97)},anchor=north west}

Any changes I make to these option only influences the outer box. Modifying the line to

legend style={draw=black,rounded corners=3pt,thin,at={(0.03,0.97)},anchor=north west, 
                 font=\small}

only changes the font of the text in the legend itself.

Is there a way to selectively change the marker size in the legend alone?

In a related question, If I mark a particular point with a small rectangle around it (using the draw command), and then want to include that rectangle in the legend to describe what the marking means, how is that done?

Update following @cmhughes recommendation

Here is the modified MWE:

\documentclass{standalone}
\usepackage{pgfplots, amsmath, amssymb}
\pgfplotsset{width=7cm, compat=newest}
\pgfplotsset{every axis/.append style={
                    legend style={font=\tiny,line width=5pt,mark size=10pt},
                    }}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            xmode =                             log,
            ymode =                             log,
            xlabel =                            {A},
            ylabel =                            {B},
            ]
            \addplot[
                color =                             red,
                mark =                              x,
                mark size =                         2,
                only marks,
            ] 
            coordinates 
            {
                (2,2.8559703)
                (30,30.5301677)
                (400,400.3050655)
                (5000,5000.1413136)
                (60000,60000.0322865)
            };
            \addlegendentry{some data}
        \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

I went through the code once more and have pinned down the problem to the addplot[mark size = 2] option. Commenting out this line changes the marker size in the legend exclusively (Marker size, line widths exaggerated for illustration):

enter image description here

But I would like to have the option of changing the marker size in the plot according to my needs, and independently scaling down all legend marker sizes.

share|improve this question

1 Answer 1

up vote 12 down vote accepted

As demonstrated by @Jake in pgfplots: Legends in multiple y-axis plot overlapping you can use \addlegendimage{<plot options>} before your plot.

For example

\addlegendimage{red,dashed};
\addlegendentry{Different!};
\addplot[blue,thick]{x^2}; 

gives

screenshot

MWE

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
    \begin{axis}
        \addlegendimage{red,dashed};
        \addlegendentry{Different!};
        \addplot[blue,thick]{x^2}; 
    \end{axis}
\end{tikzpicture}
\end{document}

Update following the comments

If you want a global change, then perhaps something like

\pgfplotsset{every axis/.append style={
                    legend style={font=\tiny,line width=.5pt,mark size=.6pt},
                    }}

will be appropriate.

screenshot

Or, finally, thanks to the guru @Jake, you could try

\pgfplotsset{every axis/.append style={
        legend style={ font=\tiny, mark options={scale=0.5} }, }
share|improve this answer
    
Thanks; this solution works. But it is still a bit tedious. I now have to manually enter the mark type, color, etc. based on what I use in the plot. I often tend to have many different \addplot[] commands on the same axes and end up cycling colors/marker styles. I'm not sure if this solution can automate the legend creation too? I'm guessing I have to plot the data, observe the output and then go back and add in a legend? –  G. H. Hardly Jan 8 '13 at 2:23
    
@G.H.Hardly but you did say, selectively :) I took this to mean that you only wanted to do it once or twice... It sounds like you want a solution that applies globally to all legends? –  cmhughes Jan 8 '13 at 2:30
    
Oh, I see I wasn't clear enough. By selectively, I meant change the marker size only in legend, and not in the actual plot. Essentially, I just want to size down markers in the legend box. For part II of my question (right at the end), your solution is exactly what I am looking for. –  G. H. Hardly Jan 8 '13 at 3:32
    
@G.H.Hardly no problem :) I have updated my answer- let me know what you think –  cmhughes Jan 8 '13 at 3:49
1  
To scale down all the markers by a certain factor (if that's what the OP wants), you can globally set every axis/.append style={ legend style={ font=\tiny, mark options={scale=0.5} }, } –  Jake Jan 8 '13 at 7:19

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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