我有一个投影仪框架,我想在其中包含一个由 3 个独立图组成的图形,如下所示:
请注意,每一个都有完全不同的轴domain
和 unit vector ratio*
。所以,如果我没错的话,groupplot
不适合这种情况。
我创建了以下.tikz
文件:
% myPlot.tikz
\begin{tikzpicture}
\begin{axis}[domain=-5:5,unit vector ratio*=2 1]
\addplot {x};
\end{axis}
\begin{scope}[yshift=-7cm]
\begin{axis}[domain=-1:3,unit vector ratio*=1 2]
\addplot {-x};
\end{axis}
\end{scope}
\begin{scope}[yshift=-7cm,xshift=8cm]
\begin{axis}[domain=-2:10,y domain=0:4,unit vector ratio*=1 0.8]
\addplot {x*x};
\end{axis}
\end{scope}
\end{tikzpicture}
在我的投影机框架里
% main.tex
\documentclass[dvipsnames]{beamer}
\usepackage{tikz,pgfplots,graphicx,siunitx,tikzscale}
\pgfplotsset{compat=1.17}
\usepackage{geometry,xcolor}
\geometry{paperwidth=148mm,paperheight=96mm}
\useoutertheme[width=20mm]{sidebar}
\usecolortheme{beaver}
\begin{document}
\begin{frame}{Algebra and Geometry}
\begin{figure}
\includegraphics[width=\textwidth,height=230pt]{myPlot.tikz}
\end{figure}
An additional line of text.
\end{frame}
\end{document}
但我收到一个错误
! Dimension too large.
<recently read> \pgfmath@x
创建这种图形的正确方法是什么?
我确实遇到了困难,真的很想尽快解决这个问题。
期望输出是
(使用 Windows Paint 人工制作)
我也试过
\resizebox{\textwidth}{194pt}
{
\input{myPlot.tikz}
}
它稍微拉伸了一下数字:
不用说,我正在研究的真实图形由 3 个复杂得多的环境组成axis
,其中一个是,surf
另一个是 3d 空间中的曲线。
我猜问题始于我定义的环境,它要求以厘米scope
为单位指定的 anx
和移位。y
我认为最好的办法是让 TeX 决定应该是什么xshift
和yshift
,并根据图形width
和height
里面的来计算includegraphics
。
这就是我请求您帮助的地方。
更新:
我刚刚了解到一个人可以做到
% myPlot.tikz
\begin{tikzpicture}
\pgfplotsset{width=\textwidth,height=194pt}
\begin{axis}[domain=-5:5,unit vector ratio*=2 1]
% rest of file..
\end{tikzpicture}
但是我仍然 在和方向上shift
进行了编辑,以厘米为单位的值,经过几次反复试验,直到我得到了满意的输出。begin{axis}
x
y
我想知道是否有更好的解决方案。
答案1
除了手动换档,您还可以name
在第一个axis
添加一个,然后使用第 4.19 节中描述的可用锚点放置其他两个轴即可对齐选项手册pgfplots
(1.18.1 版手册第 374 页)。
这-|
符号是一种获取一个坐标的 x 位置和另一个坐标的 y 位置的方法,参见TikZ:箭头的 |- 符号到底起什么作用?
\documentclass[dvipsnames]{beamer}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{geometry}
\geometry{paperwidth=148mm,paperheight=96mm}
\useoutertheme[width=20mm]{sidebar}
\usecolortheme{beaver}
\begin{document}
\begin{frame}{Algebra and Geometry}
\begin{tikzpicture}
\begin{axis}[
unit vector ratio*=2 1,
width=0.5\linewidth,
name=topaxis]
\addplot {x};
\end{axis}
\begin{axis}[
domain=-1:3,unit vector ratio*=1 2,
height=0.4\linewidth,
at={(topaxis.south west |- topaxis.outer south west)},
anchor=north west,
]
\addplot {-x};
\end{axis}
\begin{axis}[
domain=-2:10,y domain=0:4,unit vector ratio*=1 0.8,
height=0.4\linewidth,
at={(topaxis.south east |- topaxis.outer south east)},
anchor=north east]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
An additional line of text.
\end{frame}
\end{document}