将 pgfplots 的 plot3 嵌入到 tikz-3dplot 中

将 pgfplots 的 plot3 嵌入到 tikz-3dplot 中

我正在尝试将 2D 高斯嵌入到 tikz-3dplot 中,但在转换坐标系时遇到了问题。作为一个简化的示例,我在 pgflots 中绘制了一个平面,\addplot3并将该图嵌入到 tikz-3dplot 中:

\documentclass[landscape]{standalone}

\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}
\tdplotsetmaincoords{70}{155}
\pgfmathdeclarefunction{normal}{4}{%
  %\pgfmathparse{x+y}
  \pgfmathparse{1}
}

\resizebox{\textwidth}{!}{%
\begin{tikzpicture}[tdplot_main_coords]

% receiver
\pgfmathsetmacro\minx{-5}
\pgfmathsetmacro\maxx{5}
\pgfmathsetmacro\miny{-5}
\pgfmathsetmacro\maxy{5}
\pgfmathsetmacro\nextx{\minx+1}
\pgfmathsetmacro\nexty{\miny+1}
\pgfmathsetmacro\z{0}
\foreach \x in {\minx,\nextx,...,\maxx}
{
  \foreach \y in {\miny,\nexty,...,\maxy}
  {
    \draw[gray] (\x,\miny,\z) -- (\x,\maxy,\z);
    \draw[gray] (\minx,\y,\z) -- (\maxx, \y,\z);
  }
}


\draw[->, very thick,red] (-2,-3,0) -- (1,-3,0) node [above] {$x$};
\draw[->, very thick,blue] (-2,-3,0) -- (-2,0,0) node [above] {$y$};
\draw[->, very thick,green] (-2,-3,0) -- (-2,-3,3) node [above] {$z$};
\begin{axis}[
  anchor={south east}, view={155}{20}, samples=10, xlabel={X}, ylabel={Y},
  zlabel={Z}, width=10cm,height=10cm,
  xmin=-5,xmax=5,ymin=-5,ymax=5,zmin=-5,zmax=5
]
  \addplot3[surf]{normal(0,0,0.2,0.2)};
\end{axis}
\end{tikzpicture}
}
\end{document}

带有 pgfplots plot3 的 tikz-3dplot

这似乎有效,尽管我不确定轴是否真的对齐了。但是,我无法概括变换;每当我更改时\tdplotsetmaincoords,我都需要通过反复试验找到合适的变换,但通常会完全失败。

从 tikz-3dplot 坐标到 pgfplots 坐标的一般变换是什么?有没有办法做到这一点而不显式计算变换?

到目前为止,我的猜测是,对于tdplotsetmaincoords{x}{y},我需要设置view={y}{?}

答案1

在其默认配置中,pgfplots可以自由缩放图像,使其看起来合适:默认值为 ,scale mode=auto归结为scale mode=stretch to fill。顾名思义,stretch to fill可能会扭曲单位向量之间的角度,尽管图像在内部仍然是正确的。

这对于你的轴来说也是如此:pgfplots只需要尊重widthheigth作为约束,并且将重新缩放单位向量。为了将它们与(外部)坐标系对齐,您将需要使用scale mode=scale uniformly或需要显式设置轴向量(选项x=(exx,exy)及其变体)。请参阅 pgfplots 参考手册中的“缩放选项”部分和提到的选项。

正如您在问题中所述,您还需要确定如何映射\tdplotsetmaincoords到 接受的角度view。我的答案目前不涵盖这部分信息(因为没有时间仔细考虑)。在没有仔细考虑细节的情况下,我猜你需要一些“交换参数和/或在某些角度上添加 90 的倍数”的组合。

相关内容