
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 pic
s.
\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}
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}
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}