¿Cómo agregar una leyenda sin usar pgfplots?

¿Cómo agregar una leyenda sin usar pgfplots?

Estoy usando TikZ para recrear varios gráficos como práctica (y porque estoy aburrido). Dibujo este gráfico pero necesito agregar una leyenda para la línea de puntos (verde) y la normal (negra). ¿Cómo puedo hacer eso sin usar PGF Plots? Esa restricción es solo para un desafío personal porque en diferentes respuestas aquí en este sitio descubrí que todos usan eso. Recién estoy empezando a usar la biblioteca TikZ, soy completamente novato. Gracias.

Aquí está mi código:

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

Y quiero algo como esto: ingrese la descripción de la imagen aquí

Última pregunta: ¿mi código es óptimo? ¿O podría hacerlo de una manera más óptima? Agradezco todo tipo de ayuda para mejorar mis gráficas.

Respuesta1

¡Bienvenido! Agregar una leyenda es bastante fácil. Todo lo que necesitas es un matrixy un 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$}; \\
 };

Aquí, la picmuestra se definió para presentar el estilo de la trama que utiliza en su imagen. Se podría hacerlo más automático, pero esto simplemente significaría cambiar a pgfplots, lo cual no parece querer. Uno puede mejorar su código de muchas maneras, pero esto requiere más participación de su parte. Una forma bastante obvia de mejorarlo es utilizar la bonita línea de puntos desdeaquí. De todos modos, aquí hay un código algo más ergonómico que se acerca más a la imagen de destino. Evita la duplicación de coordenadas (hasta cierto punto) y utiliza -|trucos similares.

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

ingrese la descripción de la imagen aquí

Respuesta2

Esta es mi sugerencia. En lugar de pgfplots, uso TikZ únicamente: colocando pic(el nombre circes un pequeño círculo de color) junto a path.

Otra forma es utilizar decoración a lo largo del camino.

ingrese la descripción de la imagen aquí

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

información relacionada