Eine einfache Legende über Tikz machen

Nov 06 2020

Ich schreibe ein Dokument, das nur sehr wenige tatsächliche Handlungen erfordert, und ich bin mit der Ästhetik von Tikz zufrieden. Ich habe jedoch Probleme, einen Weg zu finden, um eine einfache Legende über Tikz zu machen. Ich weiß, dass es einen Weg mit der Datenvisualisierungsbibliothek gibt, aber sie scheint für einfache Grafiken viel zu kompliziert zu sein. Einige Leute schlugen vor, Matrizen zu verwenden, was sich als ziemlich genau das herausstellte, was ich wollte, wie folgt:

\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}

Ich möchte jedoch, dass die Legende den Zeichenstil der Diagramme anzeigt. Wie das, was wir im Tikz-Handbuch sehen können:

Kann ich das mit Matrizen machen? Ich möchte auch, dass die Legende nach links ausgerichtet wird, jetzt nach rechts, aber keine Ahnung, wie ich sie ändern soll.

Antworten

2 Noname Nov 06 2020 at 09:05

Ich bevorzuge auch pfgplots, aber der Vollständigkeit halber ist hier eine Methode mit 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}

Zum Ausrichten der Textknoten können Sie diese Tricks verwenden .

\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}

2 hpekristiansen Nov 06 2020 at 09:00

Um ein einheitliches Erscheinungsbild zu erhalten, empfehle ich, niemals reines TikZ für Diagramme zu verwenden, sondern PGFPlot, das auf TikZ aufbaut.

\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}