我有一堆图,我想将它们作为子图插入到更大的图中。由于它们共享相同的 y 轴,我不想浪费空间为每个图重复相同的轴和刻度标签,因此只想将标签放在每行最左侧的图上(每行的图数可以是任意的),并在每行最右侧的图上添加图例(在不同的位置)
MWE 是:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{geometry}
\usepackage{subfig}
\usepackage{adjustbox}
\usepackage{ifthen}
\begin{document}
\begin{figure}
\centering
\def\plotlist{3/2,2/3,-4/-2,-2/-4,-3/-4}
\def\fplotwidth{0.33}
\def\plotsepdist{-0.8cm}
\def\plotlinebreak{2}
\foreach \i/\j [count=\plotcount] in \plotlist{
\subfloat[$f_1: \i{}x^2$, $f_2: \j{}x^2$]{
\adjustbox{max width=\fplotwidth\linewidth}{
\begin{tikzpicture}
\begin{axis}[xlabel=xlabel text,
xlabel near ticks,
yticklabels={,,},
ymin=-10,
ymax=10,
xmin=-2,
xmax=2]
% \ifthenelse{\plotcount=1 \or \plotcount=3}{INSERT Y TICK LABELS AND Y AXIS LABEL (near yticks)}
% \ifthenelse{\plotcount=2}{\legend{$f_1$,$f_2$} (in bottom right}{}
% \ifthenelse{\plotcount=5}{\legend{$f_1$,$f_2$} (in top right}{}
\addplot[blue] {\i*x^2};
\addplot[red] {\j*x^2};
% Plot code
\end{axis}
\end{tikzpicture}
}
}
\ifthenelse{\plotcount=\plotlinebreak}{\\}{\hspace{\plotsepdist}}
}
\caption{The main caption}
\end{figure}
\end{document}
生产:
我想将ylabel=ylabel text
和添加ylabel near ticks
到轴属性中,并重新打开yticklabels
(在本例中)\plotcount=1
和\plotcount=3
。此外,我想添加\legend{$f_1$,$f_2$}
和\plotcount=2
,\plotcount=5
并将其放置在图 2 的右下角和图 5 的右上角。在设置轴属性后,有没有办法更改它们?
答案1
您可以在环境\pgfplotsset
内部使用axis
将某些选项添加到已经存在的选项中。
如果只对某些图设置 y 刻度,图的缩放比例会有所不同。因此我添加了一行设置边界框的代码。
因此,你可以这样做:
\documentclass{article}
\usepackage{geometry}
\usepackage{pgfplots}
\usepackage{subfig}
\usepackage{adjustbox}
\usepackage{ifthen}
\begin{document}
\begin{figure}
\centering
\def\plotlist{3/2,2/3,-4/-2,-2/-4,-3/-4}
\def\fplotwidth{0.33}
\def\plotsepdist{-0.8cm}
\def\plotlinebreak{2}
\foreach \i/\j [count=\plotcount] in \plotlist{
\subfloat[$f_1: \i{}x^2$, $f_2: \j{}x^2$]{
\adjustbox{max width=\fplotwidth\linewidth}{
\begin{tikzpicture}
\begin{axis}[xlabel near ticks,
ylabel near ticks,
ymin=-10,
ymax=10,
xmin=-2,
xmax=2,
legend pos=north east]
\ifthenelse{\not \plotcount=1 \and \not \plotcount=3}{
\pgfplotsset{yticklabels={,,}}
}{}
\ifthenelse{\plotcount=2}{
\pgfplotsset{legend pos=south east}
\legend{$f_1$,$f_2$}
}{}
\ifthenelse{\plotcount=5}{
\legend{$f_1$,$f_2$}
}{}
\addplot[blue] {\i*x^2};
\addplot[red] {\j*x^2};
% Plot code
\end{axis}
\pgfresetboundingbox
\path ([shift={(-10pt,-10pt)}]current axis.south west)
rectangle ([shift={(10pt,10pt)}]current axis.north east);
\end{tikzpicture}
}
}
\ifthenelse{\plotcount=\plotlinebreak}{\\}{\hspace{\plotsepdist}}
}
\caption{The main caption}
\end{figure}
\end{document}