How can you align the text inside labels with pgfplots? In the example below, I would like to align both the k's and the m's.

\documentclass[preview]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title={$y=kx+m$},
        ylabel={$y$},
        xlabel={$x$},
        legend cell align=left,
        ]
    \addplot[blue, domain=1:4, samples=4]  {10*x - 5};
    \addlegendentry{$k = 10$, $m = -5$}
    \addplot[red, domain=1:4, samples=4]  {2*x + 3};
    \addlegendentry{$k = 2$, $m = 3$}   
    \end{axis}
    \end{tikzpicture}
\end{document}

mwe

up vote 4 down vote accepted

I don't think that there is general way, at the end you have two more or less independant nodes. How at best to "synchronize" their content depends a lot on the concrete case. And almost everything that works is ok.

In your example I would probably use eqparbox:

\documentclass[preview]{standalone}
\usepackage{pgfplots}
\usepackage{eqparbox}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title={$y=kx+m$},
        ylabel={$y$},
        xlabel={$x$},
        legend cell align=left,
        %legend columns=2
        ]
    \addplot[blue, domain=1:4, samples=4]  {10*x - 5};
    \addlegendentry{\eqmakebox[m1][l]{$k = 10$,} $m = -5$}
    \addplot[red, domain=1:4, samples=4]  {2*x + 3};
    \addlegendentry{\eqmakebox[m1][l]{$k = 2$,}  $m = 3$}
    \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

Quick hack:

\documentclass[preview]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title={$y=kx+m$},
        ylabel={$y$},
        xlabel={$x$},
        legend cell align=left,
        ]
    \addplot[blue, domain=1:4, samples=4]  {10*x - 5};
    \addlegendentry{$k = 10$, $m = -5$}
    \addplot[red, domain=1:4, samples=4]  {2*x + 3};
    \addlegendentry{$k = 2$,\phantom{0} $m = 3$}   
    \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

  • Yes, I could also do it by inserting a \hfill{} with the appropriate length as well, but I was wondering if there was a general way. – Ema Aug 15 at 12:32

This solution is similar to the linked one except that I use an array instead of align. Note that the array is actually overlaid over a bunch of \struts. Not sure why one needs to tweak \arraystretch for this.

\documentclass[preview]{standalone}
\usepackage{pgfplots}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title={$y=kx+m$},
        ylabel={$y$},
        xlabel={$x$},
        legend cell align=left,
        ]
    \addplot[blue, domain=1:4, samples=4]  {10*x - 5};
    \addplot[red, domain=1:4, samples=4]  {2*x + 3};
    \legend{\smash{\def\arraystretch{1.15}% align tabular to \struts
      $\begin{array}[t]{@{k=\null}l@{$ $m=\null}l@{}}
        10,&-5\\
        2,&3
      \end{array}$}\strut,\strut}
    \end{axis}
    \end{tikzpicture}
\end{document}

demo

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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