
Я уже задавал похожий вопрос:Создать групповой участок 2x2 с +1 участком сбоку?
В то время использование среды subfigure не было проблемой. Но сейчас я не хочу использовать среду subfigure, поэтому ищу другое решение. Сюжет, который я хочу создать, такой:
|-----------------|
| | Plot 4 |
| Plot 1 |--------|
| | Plot 5 |
|-----------------|
| | Plot 6 |
| Plot 2 |--------|
| | Plot 7 |
|-----------------|
| | Plot 8 |
| Plot 3 |--------|
| | Plot 9 |
|-----------------|
Графики 1,2,3 имеют одну и ту же ось x (и для интересующихся это график импульсной характеристики), как и графики 4,..,9 (которые являются диаграммами Боде, амплитуда + фаза).
Есть у кого-нибудь идеи? Я думаю, что groupplots следует расширить, добавив некоторые табличные возможности.
Если вы ищете минимальный пример, то у меня его нет, так как я не знаю, как это создать, но код решения моего предыдущего вопроса может помочь вам начать,https://tex.stackexchange.com/a/117685/15360
ps. кстати, решение не обязательно должно использовать среду groupplot. Основная причина, по которой я так часто использую groupplot, заключается в том, что я знаю, что выравнивание хорошее. Также, когда вы показываете метки x и y, а также отметки x и y. Так что это подло о том, что выравнивание правильное.
решение1
Вы можете использовать две groupplots
среды, где высота осей во второй составляет половину высоты осей в первой. Чтобы выровнять их должным образом, я разместил первый подучасток второго группового участка относительно первого группового участка, с
\nextgroupplot[anchor=north west, at={($(left plots c1r1.north east) + (0.2cm,0)$)}]
left plots
это метка для первого группового графика, добавленная с помощью
group style={
group name=left plots,
..
}
и left plots c1r1
— это ось, которая находится в первом столбце и первой строке группы.
Я использовал ($(a) + (b)$)
синтаксис из calc
библиотеки, так как ([xshift=0.2cm]left plots c1r1.north east)
он не сработал.
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=left plots,
group size=1 by 3,
vertical sep=0pt,
x descriptions at=edge bottom},
width=4cm,
height=4cm,
scale only axis]
\nextgroupplot
\addplot {x^2};
\nextgroupplot
\addplot {x^2};
\nextgroupplot
\addplot {x^2};
\end{groupplot}
\begin{groupplot}[
group style={
group size=1 by 6,
vertical sep=0pt,
x descriptions at=edge bottom},
width=4cm,
height=2cm,
scale only axis,
ytick pos=right]
\nextgroupplot[anchor=north west, at={($(left plots c1r1.north east) + (0.2cm,0)$)}]
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x};
\end{groupplot}
\end{tikzpicture}
\end{document}
Старый ответ
Мне бы хотелось иметь groupplots
единственное решение, но обходной путь — использовать два объекта tikzpicture
s, каждый из которых имеет groupplot
окружение, где высота осей во втором объекте составляет половину высоты осей в первом объекте.
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group size=1 by 3,
vertical sep=0pt,
x descriptions at=edge bottom},
width=4cm,
height=4cm,
scale only axis]
\nextgroupplot
\addplot {x^2};
\nextgroupplot
\addplot {x^2};
\nextgroupplot
\addplot {x^2};
\end{groupplot}
\end{tikzpicture}
%
\begin{tikzpicture}
\begin{groupplot}[
group style={
group size=1 by 6,
vertical sep=0pt,
x descriptions at=edge bottom},
width=4cm,
height=2cm,
scale only axis,
ytick pos=right]
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x)};
\nextgroupplot
\addplot {sqrt(x};
\end{groupplot}
\end{tikzpicture}
\end{document}
решение2
Это также можно сделать внутри одного группового лота 2x6, сгруппировав по 2 графика левого столбца:
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{
% override style for non-boxed plots
% which is the case for both sub-plots
every non boxed x axis/.style={},
rightGraph/.style={ytick pos=right},
leftUpperGraph/.style={ axis x line=top, ymin=10,ymax=20, xmin=-5,xmax=5, ytick={12,14,...,18}, %To remove one of the two 10 so it doesn't look bold.
},
leftLowerGraph/.style={ axis x line=bottom, ymin=0,ymax=10, xmin=-5,xmax=5,},
}
\begin{groupplot}[
group style={
group size=2 by 6,
vertical sep=0pt,
horizontal sep=2mm,
x descriptions at=edge bottom},
width=4cm,
height=2cm,
scale only axis]
\nextgroupplot[%
leftUpperGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\nextgroupplot[%
leftLowerGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\nextgroupplot[%
leftUpperGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\nextgroupplot[%
leftLowerGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\nextgroupplot[%
leftUpperGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\nextgroupplot[%
leftLowerGraph,
]
\addplot {x^2};
\nextgroupplot[%
rightGraph,
]
\addplot {sqrt(x)};
\end{groupplot}
\end{tikzpicture}
\end{document}
Я уже несколько месяцев не писал никаких групповых графиков (кроме этого^^), поэтому у меня есть бонусный вопрос: как мне определить стиль для группового графика? \tikzstyle
Не работает… Это сделало бы мой код немного короче :)
Редактировать:
Ответ был дан Торбьёрном Т., поэтому я обновил свой ответ соответствующим образом, введя стили.