pgfplots
내 그래픽에 의 tikz
라이브러리 를 사용하고 있으며 규정 준수를 위해 패키지를 external
사용해야 합니다 .subfigure
아래 mwe("시도 1" 부분)에서 볼 수 있듯이 환경 figure*
(필수 사용해야 함) 내부에 두 개의 작은 하위 그림을 배치하고 두 그림 사이에 범례(두 그림에 공통)를 추가하고 싶습니다. 중간 높이. 그런데, 다양한 레전드 위치 지정을 시도해봐도, 아무리 해도 레전드가 1밀리미터도 움직이지 않습니다.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[pdftex]{graphicx}
\graphicspath{{./img/}}
\DeclareGraphicsExtensions{.pdf}
\usepackage{subfigure}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikzpics/}
\pgfplotsset{compat=newest, every mark/.append style={mark size=1pt, mark line=solid}}
\begin{document}
%%%%%%%%% Attempt 1
\begin{figure*}[t!]
\centering
\subfigure[First]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}\hfil
\subfigure{
\begin{tikzpicture}
\begin{axis}[width=0.2\textwidth, height=0.2\textwidth, hide axis, xmin=0, xmax=10, ymin=0, ymax=0.2,legend columns=1,
legend style={draw=white!15!black,legend cell align=left, at={(0.5,0.5)}},]
\addlegendimage{blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}}
\addlegendentry{Trace 1}
\addlegendimage{green, mark=*, ultra thick}
\addlegendentry{Trace 2}
\addlegendimage{red, mark=square*, dotted, ultra thick, mark options={solid,scale=1.5}}
\addlegendentry{Trace 3}
\end{axis}
\end{tikzpicture}}\hfil
\subfigure[Second]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
%%%%%%%%% Attempt 2
\begin{figure*}[t!]
\centering
\subfigure[First]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis}, legend style={overlay, at={(1.2,0.5)},anchor={north}}]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\legend{Trace 1, Trace 2, Trace 3};
\end{axis}
\end{tikzpicture}}\hfil
\subfigure[Second]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
\end{document}
overlay
두 번째 시도로 환경 옵션을 사용해 보았습니다 axis
(위 mwe의 "시도 2" 부분 참조). 이번에는 subfigure
환경이 플롯 외부에 있는 범례 부분을 잘라내는 것을 볼 수 있으며(아래 이미지 참조) 이를 방지할 수 있는 옵션을 찾을 수 없는 것 같습니다.
pgfplots
참고로 '옵션 legend to name
+ '도 사용해 보았지만 \ref
외부화를 위해 다양한 옵션을 사용해도 성공하지 못했습니다.
어떤 제안이라도 환영합니다. 미리 감사드립니다.
답변1
baseline
s 옵션을 사용할 수 있으며 tikzpicture
외부 그래픽에도 작동하는 것 같습니다. 옵션(또는 ) name=ax
에 추가하고 세 가지 모두에 사용합니다. 필요하지 않기 때문에 중간 부분 도 제거했습니다 .axis
legend style
baseline=(ax.center)
\subfigure{}
tikzpicture
부록으로, 이와 같은 경우 사용자 정의 사이클 목록을 만드는 것이 유용할 수 있습니다. 그러면 플롯 스타일을 세 번 이상 복제할 필요가 없습니다.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[pdftex]{graphicx}
\graphicspath{{./img/}}
\DeclareGraphicsExtensions{.pdf}
\usepackage{subfigure}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikzpics/}
\pgfplotsset{
compat=newest,
every mark/.append style={mark size=1pt, mark line=solid},
}
% create a custom cycle list:
\pgfplotscreateplotcyclelist{MyList}{
blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}\\
green, mark=*, ultra thick\\
red, mark=square*, mark options={solid}, mark size=3pt,dotted, ultra thick\\
}
\begin{document}
\begin{figure*}
\centering
\subfigure[First]{
\begin{tikzpicture}[baseline=(ax.center)] % <-- added baseline
\begin{axis}[
name=ax, % added
cycle list name=MyList, % added
width=0.4\textwidth,
xlabel={X axis},
ylabel={Y axis}
]
\addplot coordinates {(-0.5,-1) (1,1)};
\addplot coordinates {(-0.5,-0.9) (1,1.1)};
\addplot coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}\hfil
\begin{tikzpicture}[baseline=(leg.center)] % <-- added baseline
\begin{axis}[
cycle list name=MyList, % added
width=0.2\textwidth, height=0.2\textwidth,
hide axis,
xmin=0, xmax=10, ymin=0, ymax=0.2,
legend columns=1,
legend style={
name=leg, % added
draw=white!15!black,
legend cell align=left,
at={(0.5,0.5)}
}]
% add three dummy plots, the single point is outside the axis limits, so not shown
\pgfplotsinvokeforeach{1,2,3}{\addplot coordinates {(0,-1)};}
\addlegendentry{Trace 1}
\addlegendentry{Trace 2}
\addlegendentry{Trace 3}
\end{axis}
\end{tikzpicture}\hfil
\subfigure[Second]{
\begin{tikzpicture}[baseline=(ax.center)] % <-- added baseline option
\begin{axis}[
name=ax, % added
cycle list name=MyList, % added
width=0.4\textwidth,
xlabel={X axis}, ylabel={Y axis},
]
\addplot coordinates {(-0.5,-1) (1,1)};
\addplot coordinates {(-0.5,-0.9) (1,1.1)};
\addplot coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
\end{document}