如何才能“合并”两张 tikzpicture 并排?我尝试了相关文章中提供的几种解决方案,\subfigure
但它总是在图形之间产生一点空白。
这是我的代码:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgf, tikz, adjustbox}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns, matrix, positioning}
\usetikzlibrary{arrows.meta,
patterns.meta
}
\begin{document}
\begin{figure}
\begin{tikzpicture}[
declare function={
gauss(\x)=3*exp(-(\x/3)^2);
}, scale = 0.6]
\fill[cyan!20] plot[domain=0:8, samples=100] (\x, {gauss(\x)}) |-(0,0);
\filldraw[fill=pink!20, very thick] plot[domain=0:8, samples=100] (\x, {gauss(\x)}) -- plot[domain=8:0, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\end{tikzpicture}
\begin{tikzpicture}[
declare function={
gauss(\x)=3*exp(-(\x/3)^2);
}, scale = 0.6]
\fill[cyan!20] plot[domain=-8:0, samples=100] (\x, {gauss(\x)}) |-(0,0);
\filldraw[fill=pink!20, very thick] plot[domain=-8:0, samples=100] (\x, {gauss(\x)}) -- plot[domain=0:-8, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\end{tikzpicture}
\end{figure}
\end{document}
我也尝试过\scope
这篇文章中提到的工具:
在 TikZ 中合并图但我认为我做得不正确,因为我一直有一个空白处......
非常感谢,
答案1
两个tikzpicture
并排
您需要通过添加来隐藏\end{tikzpicture}
和之间的空间,否则该空间将位于图片之间。\begin{tikzpicture}
%
由于 TikZ 在确定边界框时会考虑线宽,因此您将在那里看到一条看似双倍宽的线。我建议使用trim left
和trim right
选项。
(我们不能(0:8)
在那里使用但需要使用,(0:.6*8)
因为它没有考虑到,scale
这就是为什么我在图中使用命名坐标。)
转移第二部分
不过,您也可以通过tikzpicture
将第二部分向右移动约 16 个单位来将两个部分合并绘制,即shift={(16,0)}
或shift=(0:16)
。
由于你的左侧从X= 0 到 8,右边从 −8 到 0,两者之间总共相差 16 个单位X= 0。
绘制在一起
如果您愿意,您也可以一次在一条路径上绘制它(它们之间没有垂直线)。
我们仍然使用shift=(0:16)
键,以便绘图域正常工作,但这次仅针对路径的一部分,通过将包括转换在内的该部分括在{
和中}
。
垂直线可以简单地通过以下方式添加
\draw[very thick] (0:8) -- ++ (up:.6);
代码
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
declare function={gauss(\x)=3*exp(-(\x/3)^2);}, scale = 0.6,
trim right=(@tr)]
\fill[cyan!20]
plot[domain=0:8, samples=100] (\x, {gauss(\x)}) coordinate (@tr) -| cycle;
\filldraw[fill=pink!20, very thick]
plot[domain=0:8, samples=100] (\x, {gauss(\x)})
-- plot[domain=8:0, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\end{tikzpicture}% <- important
\begin{tikzpicture}[
declare function={gauss(\x)=3*exp(-(\x/3)^2);}, scale = 0.6,
trim left=(@tl)]
\fill[cyan!20]
plot[domain=-8:0, samples=100] (\x, {gauss(\x)}) |- cycle
coordinate[at start] (@tl);
\filldraw[fill=pink!20, very thick]
plot[domain=-8:0, samples=100] (\x, {gauss(\x)})
-- plot[domain=0:-8, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\end{tikzpicture}
\begin{tikzpicture}[
declare function={gauss(\x)=3*exp(-(\x/3)^2);},
scale = 0.6]
\fill[cyan!20] plot[domain=0:8, samples=100] (\x, {gauss(\x)}) -| cycle;
\filldraw[fill=pink!20, very thick]
plot[domain=0:8, samples=100] (\x, {gauss(\x)})
-- plot[domain=8:0, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\begin{scope}[shift=(0:16)]
\fill[cyan!20] plot[domain=-8:0, samples=100] (\x, {gauss(\x)}) |- cycle;
\filldraw[fill=pink!20, very thick]
plot[domain=-8:0, samples=100] (\x, {gauss(\x)})
-- plot[domain=0:-8, samples=100] (\x, {gauss(\x)+0.6}) -- cycle;
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}[
declare function={gauss(\x)=3*exp(-(\x/3)^2);},
scale = 0.6,
s/.style={shift=(0:16)}]
\fill [cyan!20]
plot[domain= 0:8, samples=100] (\x, {gauss(\x)})
{[s] -- plot[domain=-8:0, samples=100] (\x, {gauss(\x)})
|- (-8,0)}
-| cycle;
\filldraw[fill=pink!20, very thick]
plot[domain=0:8, samples=100] (\x, {gauss(\x)})
{[s] -- plot[domain=-8:0, samples=100] (\x, {gauss(\x)})
-- plot[domain=0:-8, samples=100] (\x, {gauss(\x)+0.6})}
-- plot[domain=8:0, samples=100] (\x, {gauss(\x)+0.6})
-- cycle;
% \draw[very thick] (0:8) -- ++ (up:.6);
\end{tikzpicture}
\end{document}