我在 pgfplot 中执行特殊图例和使用 tikz 外部化时遇到了问题。请参阅下面的 MWE。如果我使用外部化,图例将不会出现,但如果我删除外部化,图例就会出现。
关于如何在使用外部化的同时获得图例,有什么想法吗?
\documentclass{memoir}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize[prefix=ext/]
\usepackage{subcaption}
\begin{document}
\pgfplotsset{width=\textwidth,height=6cm}
\begin{figure}[!ht]
\centering
\vspace{30pt}
\begin{subfigure}[b]{0.49\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}[
legend style={
anchor = south,
column sep = 0pt,
legend columns = 2,
at = {(0.9\textwidth,1.1)},
overlay,
font=\scriptsize
}
]
\addplot {x^3 - x^2};
\addplot {x^3 +2};
\addplot {x^2};
\addplot {4*x+2};
\legend{plot a, plot b, plot c, plot d};
\end{axis}
\end{tikzpicture}
\caption{cap 1}
\end{subfigure}
\begin{subfigure}[b]{0.49\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}
\addplot {x^3 + x^2};
\addplot {-2*x^3 -1};
\addplot {x^2};
\addplot {4*x+2};
\end{axis}
\end{tikzpicture}
\caption{cap 2}
\end{subfigure}
\caption{...}
\end{figure}
\end{document}
答案1
外部 PDF 包含图例的绘制说明,但由于它被排除在边界框之外,因此被剪掉了。我相信这是 PDF 的限制(或 PDF 的边界框在 TeX 中生成的方式)。我认为它曾经适用于dvips
,但我可能错了。
pdftex
一种可移植的方法(即同样适用的方法)是使用legend to name
并省略选项overlay
。此键允许您将图例与其父轴“分离”,并使用将其放置在您喜欢的位置\ref{<the name>}
:
\documentclass{memoir}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize[prefix=ext/]
\usepackage{subcaption}
\begin{document}
\pgfplotsset{width=\textwidth,height=6cm}
\begin{figure}[!ht]
\centering
\ref{mylegend}
\vspace{30pt}
\begin{subfigure}[b]{0.49\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}[
legend style={
anchor = south,
column sep = 0pt,
legend columns = 2,
at = {(0.9\textwidth,1.1)},
font=\scriptsize
},
legend to name=mylegend,
]
\addplot {x^3 - x^2};
\addplot {x^3 +2};
\addplot {x^2};
\addplot {4*x+2};
\legend{plot a, plot b, plot c, plot d};
\end{axis}
\end{tikzpicture}
\caption{cap 1}
\end{subfigure}
\begin{subfigure}[b]{0.49\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}
\addplot {x^3 + x^2};
\addplot {-2*x^3 -1};
\addplot {x^2};
\addplot {4*x+2};
\end{axis}
\end{tikzpicture}
\caption{cap 2}
\end{subfigure}
\caption{...}
\end{figure}
\end{document}
请注意,\ref{mylegend}
需要像其他一样放置\includegraphics
。在本例中,我将其插入到图形的居中标题中。您可能希望根据需要采用它(以及其上方/下方的间距)。
在某种程度上,这个标签/引用内容在external
库中具有内置支持。“在某种程度上”意味着你必须将\ref
手动;输出.log
文件说明要在命令行中输入哪个命令。Linuxmode=list and make
没有此限制;它可以自动生成所需的图形。这些有关标签/引用外部化的限制将在 PGF(或 pgfplots,以先到者为准)的下一个版本中解除。