
나는 TikZ를 사용하여 연습으로 여러 그래픽을 재현하고 있습니다(심심해서). 이 그래프를 그리는데 점선(녹색)과 일반 그래프(검은색)에 대한 범례를 추가해야 합니다. PGF 플롯을 사용하지 않고 어떻게 이를 수행할 수 있습니까? 그 제한은 여기 이 사이트의 다른 답변에서 개인적인 문제에만 해당됩니다. 모든 사람이 그것을 사용하는 것으로 나타났습니다. 저는 이제 막 TikZ 라이브러리를 사용하기 시작했습니다. 저는 완전히 멍청한 사람입니다. 감사해요.
내 코드는 다음과 같습니다.
\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}
마지막 질문: 내 코드가 최적인가요? 아니면 좀 더 최적의 방법으로 할 수 있을까요? 그래프를 개선하는 데 도움을 주셔서 감사합니다.
답변1
환영! 범례를 추가하는 것은 다소 쉽습니다. 필요한 것은 a matrix
와 a 뿐입니다 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$}; \\
};
여기에서는 pic
그림에 사용하는 플롯의 스타일을 특징으로 하는 샘플이 정의되었습니다. 좀 더 자동으로 만들 수도 있지만 이는 단지 다음으로 전환하는 것을 의미할 뿐입니다.pgfplots
원하지 않는 것 같습니다. 여러 가지 방법으로 코드를 개선할 수 있지만 이를 위해서는 사용자 측의 더 많은 입력이 필요합니다. 이를 개선하는 다소 분명한 방법은 다음의 멋진 점선을 사용하는 것입니다.여기. 어쨌든, 여기에 대상 그림에 더 가까운 좀 더 인체공학적인 코드가 있습니다. 좌표의 중복(어느 정도)을 방지하고 -|
유사한 트릭을 사용합니다.
\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}
답변2
이것이 나의 제안입니다. 대신 pgfplots
TikZ만 사용합니다. pic
(이름은 circ
작은 색상의 원입니다.)를 에 배치합니다 path
.
또 다른 방법은 경로를 따라 장식을 사용하는 것입니다.
\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}