
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}
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 matrix
und 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 pic
wurde 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}
Antwort2
Das ist mein Vorschlag. Anstelle von pgfplots
verwende ich nur TikZ: setze pic
(Name circ
ist ein kleiner farbiger Kreis) neben path
.
Eine andere Möglichkeit besteht darin, Dekorationen entlang des Pfads zu verwenden.
\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}