Wie füge ich eine Legende hinzu, ohne pgfplots zu verwenden?

Wie füge ich eine Legende hinzu, ohne pgfplots zu verwenden?

ich verwende TikZ, um zu üben (und weil mir langweilig ist), um verschiedene Grafiken nachzubilden. Ich zeichne dieses Diagramm, muss aber eine Legende für die gepunktete Linie (grün) und die normale Linie (schwarz) hinzufügen. Wie kann ich das tun, ohne PGF Plots zu verwenden? Diese Einschränkung gilt nur für eine persönliche Herausforderung, denn in verschiedenen Antworten hier auf dieser Site habe ich festgestellt, dass jeder das verwendet. Ich fange gerade erst an, die TikZ-Bibliothek zu verwenden, ich bin ein absoluter Neuling. Danke.

Hier ist mein Code:

\begin{figure}[h!]
\centering
\begin{tikzpicture}
\draw [<->] (0,4) -- (0,0) -- (4,0);
\draw [dotted, ultra thick, color=darkpastelgreen] (0,3) -- (3,0);
\draw [-] (0,3) -- (3,0);
\node [left] at (0,3) {$100$};
\node [below] at (3,0) {$100$};
\node [below left] at (0,0) {0};
\node [below] at (4,0) {$S_{B}$};
\node [left] at (0,4) {$S_{A}$};
\draw [dashed, color=lightgray] (0,3) -- (3,3) -- (3,0);
\draw[decoration={brace,raise=5pt},decorate]
  (0,2.9) -- node[above right=6pt] {Agreement Zone} (2.9,0);
\end{tikzpicture}
\end{figure}

Und ich möchte so etwas: Bildbeschreibung hier eingeben

Letzte Frage: Ist mein Code optimal? Oder könnte ich ihn noch optimaler gestalten? Ich bin für jede Art von Hilfe zur Verbesserung meiner Grafiken dankbar.

Antwort1

Willkommen! Das Hinzufügen einer Legende ist ziemlich einfach. Alles was Sie brauchen ist ein matrixund ein pic,

\path (current bounding box.north east) 
 node[matrix,anchor=north east,draw,nodes={anchor=center},inner sep=2pt]  {
  \pic{sample=black}; & \node{$BR_A$}; \\
  \pic{sample={Dotted,ultra thick,color=darkpastelgreen}}; & \node{$BR_B$}; \\
 };

Hier picwurde das Beispiel so definiert, dass es den Stil des Plots enthält, den Sie in Ihrem Bild verwenden. Man könnte es automatischer machen, aber das würde lediglich bedeuten, auf umzuschalten pgfplots, was Sie anscheinend nicht wollen. Man kann Ihren Code auf viele Arten verbessern, aber das erfordert mehr Input von Ihrer Seite. Eine ziemlich offensichtliche Möglichkeit zur Verbesserung ist die Verwendung der schönen gepunkteten Linie vonHier. Wie dem auch sei, hier ist ein etwas ergonomischerer Code, der näher an Ihrem Zielbild ist. Er vermeidet (bis zu einem gewissen Grad) die Duplizierung von Koordinaten und verwendet -|ähnliche Tricks.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\definecolor{darkpastelgreen}{RGB}{105,186,72}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[>=stealth,scale=pi/2,
    pics/sample/.style={code={\draw[#1] (0,0) --(0.6,0) ;}},
    Dotted/.style={% https://tex.stackexchange.com/a/52856/194703
    dash pattern=on 0.1\pgflinewidth off #1\pgflinewidth,line cap=round,
    shorten >=#1\pgflinewidth/2,shorten <=#1\pgflinewidth/2},
    Dotted/.default=3]
\draw [<->] (0,4) node[left] {$S_{A}$} -- (0,0) node[below left]  {$0$}
-- (4,0) node [below] {$S_{B}$};
\draw [-] (0,3)node[left]  {$100$}  -- (3,0) node[below]  {$100$};
\draw [Dotted,ultra thick, color=darkpastelgreen] (0,3)-- (3,0);
\draw [dashed, color=lightgray] (0,3) -| (3,0);
\draw[decoration={brace,raise=5pt},decorate,thick]
  (0,2.9) -- node[above right=2ex,xshift=-2ex,align=left] {Agreement\\ Zone} (2.9,0);
\path (current bounding box.north east) 
 node[matrix,anchor=north east,draw,nodes={anchor=center},inner sep=2pt]  {
  \pic{sample=black}; & \node{$BR_A$}; \\
  \pic{sample={Dotted,ultra thick,color=darkpastelgreen}}; & \node{$BR_B$}; \\
 };
\end{tikzpicture}
\end{figure}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Das ist mein Vorschlag. Anstelle von pgfplotsverwende ich nur TikZ: setze pic(Name circist ein kleiner farbiger Kreis) neben path.

Eine andere Möglichkeit besteht darin, Dekorationen entlang des Pfads zu verwenden.

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[>=latex,
circ/.pic={\fill[green!50!black] (0,0) circle(1.5pt);}]
\draw (0,3)--(3,0);
\draw[<->] (0,4)--(0,0)--(5,0);
\draw[dashed,lightgray] (0,3)-|(3,0);
\draw[decoration={brace,raise=3pt},decorate]
    (0,3)--(3,0);
\foreach \i in {0,.05,...,1.05}
\path (0,3)--(3,0) pic[pos=\i]{circ};

\path
(0,3) node[left]{$100$}
(3,0) node[below]{$100$}
(0,0) node[below left]{0}
(5,0) node[below]{$S_{B}$}
(0,4) node[left]{$S_{A}$}
(2.2,2.2) node[align=left,scale=.8] {Agreement\\Zone};

% for legend
\begin{scope}[local bounding box=L,shift={(4.5,3.5)}]
\path (0,0) node (A) {$BR_A$}
(-90:.4) node (B) {$BR_B$};
\draw (A.west)--+(180:.6);
\foreach \i in {0,.3,...,1}
\path (B.west)--+(180:.6) pic[pos=\i]{circ};
\end{scope} 
\draw ([xshift=-2mm]L.south west) rectangle (L.north east);
\end{tikzpicture}
\end{figure}
\end{document}

verwandte Informationen