Haciendo una leyenda simple en tikz

Haciendo una leyenda simple en tikz

Estoy escribiendo un documento que requiere muy pocas tramas reales y estoy contento con la estética de tikz. Sin embargo, tengo problemas para encontrar una manera de hacer una leyenda simple en tikz. Sé que hay una manera con la biblioteca de visualización de datos, pero parece demasiado complicada para gráficos simples. Algunas personas sugirieron usar matrices, que resultó ser más o menos lo que yo quería, como esta:

\documentclass[11pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[->] (-1,0) -- (8,0)  node[right]{$x$};
\draw[->] (0,-2) -- (0,2)  node[above]{$y$};
\draw[green,samples=100,domain=-1:8] plot(\x,{sin(deg(\x))});
\draw[red,samples=100,domain=-1:8] plot(\x,{cos(deg(\x))});
\draw[blue] (0,0)--(pi/2,1)--(3*pi/2,-1)--(5*pi/2,1);
\matrix [draw, above left] at (8,-2) {
  \node[green,font=\tiny] {$\sin x$}; \\
  \node[red,font=\tiny] {$\cos x$}; \\
  \node[blue,font=\tiny] {Lines}; \\
};
\end{tikzpicture}
\end{document}

Sin embargo, quiero que la leyenda muestre el estilo de dibujo de los gráficos. Como lo que podemos ver en el manual de tikz:

¿Puedo hacer eso con matrices? También me gustaría que la leyenda estuviera alineada a la izquierda, ahora mismo está a la derecha, pero no tengo idea de cómo cambiarla.

Respuesta1

También prefiero pfgplots pero para completar aquí hay un método que usa pics.

\documentclass[11pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[pics/legend entry/.style={code={%   
        \draw[pic actions] 
        (-0.5,0.25) sin (-0.25,0.4) cos (0,0.25) sin (0.25,0.1) cos (0.5,0.25);}}]
\draw[->] (-1,0) -- (8,0)  node[right]{$x$};
\draw[->] (0,-2) -- (0,2)  node[above]{$y$};
\draw[green!70!black,samples=100,domain=-1:8] plot(\x,{sin(deg(\x))});
\draw[red,samples=100,domain=-1:8] plot(\x,{cos(deg(\x))});
\draw[blue] (0,0)--(pi/2,1)--(3*pi/2,-1)--(5*pi/2,1);
\matrix [draw, above left] at (8,-2) {
 \pic[green!70!black]{legend entry}; &  \node[green!70!black,font=\tiny] {$\sin x$}; \\
 \pic[red]{legend entry}; &  \node[red,font=\tiny] {$\cos x$}; \\
 \pic[blue]{legend entry}; &  \node[blue,font=\tiny] {Lines}; \\
};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Para alinear los nodos de texto puedes usarestos trucos.

\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{eqparbox}
\begin{document}
\newbox\eqnodebox
\tikzset{lequal size/.style={execute at begin
    node={\setbox\eqnodebox=\hbox\bgroup},
    execute at end node={\egroup\eqmakebox[#1][l]{\copy\eqnodebox}}},
    lequal size/.default=A,}
\begin{tikzpicture}[pics/legend entry/.style={code={%   
        \draw[pic actions] 
        (-0.5,0.25) sin (-0.25,0.4) cos (0,0.25) sin (0.25,0.1) cos (0.5,0.25);}}]
\draw[->] (-1,0) -- (8,0)  node[right]{$x$};
\draw[->] (0,-2) -- (0,2)  node[above]{$y$};
\draw[green!70!black,samples=100,domain=-1:8] plot(\x,{sin(deg(\x))});
\draw[red,samples=100,domain=-1:8] plot(\x,{cos(deg(\x))});
\draw[blue] (0,0)--(pi/2,1)--(3*pi/2,-1)--(5*pi/2,1);
\matrix [draw, above left] at (8,-2) {
 \pic[green!70!black]{legend entry}; &  \node[lequal size,green!70!black,font=\tiny] {$\sin x$}; \\
 \pic[red]{legend entry}; &  \node[lequal size,red,font=\tiny] {$\cos x$}; \\
 \pic[blue]{legend entry}; &  \node[lequal size,blue,font=\tiny] {Lines}; \\
};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Para obtener una apariencia consistente, sugiero nunca usar TikZ puro para los gráficos, sino PGFPlot construido sobre TikZ.

\documentclass[11pt]{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
  samples=100,
  domain=-1:8,
  xmin=-1, xmax=8,
  ymin=-2, ymax=2,
  axis lines=middle,
  ticks=none,
  xlabel={$x$},
  ylabel={$y$},
  legend pos=south east,
  width=\textwidth,
  height=0.5*\textwidth]
\addplot[green] {sin(deg(\x))};
\addplot[red] {cos(deg(\x))};
\addplot[blue] coordinates{(0,0) (pi/2,1) (3*pi/2,-1) (5*pi/2,1)};
\addlegendentry{$sin(x)$}
\addlegendentry{$cos(x)$}
\addlegendentry{Lines}
\end{axis};
\end{tikzpicture}
\end{document}

Grafico con leyenda

información relacionada