在表面上绘制 x*y=1

在表面上绘制 x*y=1

我想从 x*y=1 在表面上画一条线。我该怎么做?

\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x+y$}, 
xlabel=$x$, ylabel=$y$,
xmin=0, xmax=2,
ymin=0, ymax=2,
zmin=0, zmax=4,
3d box=complete,]
\addplot3[surf, domain=0:2] 
{x+y};
\end{axis}
\end{tikzpicture}

答案1

如果我理解正确的话,你打算展示一个曲面图 f(x,y) = x+y 和轮廓 1= g(x,y) = x* y,但绘制进入表面图,即您想要绘制线 {(x,y, x+y) | x*y=1 }。这样对吗?

可以按照如下方式完成:

解决方案 1:使用正常曲面图和轮廓叠加。我选择在这里使用通用方法“1 = g(x,y)”,希望即使有人选择不同的 g,也会发现该方法有用:

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{compat=1.15}

\begin{document}

\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x+y$}, 
xlabel=$x$, ylabel=$y$,
xmin=0, xmax=2,
ymin=0, ymax=2,
zmin=0, zmax=4,
%view={0}{90},
3d box=complete,]
\addplot3[
    surf,
    domain=0:2] 
{x+y};

%\addplot3[domain=0:2,draw=none,contour gnuplot={file=contourxy1,levels=1}] {x*y};

\addplot3[black] table[z expr=x+y] {contourxy1.table};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

首先,我计算了 1 = g(x,y) = x*y 并将结果坐标写入文件contourxy1.table。为此,我调用了

\addplot3[domain=0:2,draw=none,contour gnuplot={file=contourxy1,levels=1}] {x*y};

这不是最终输出的一部分。然后,我加载了这个文件并修改了它的 Z 坐标,以便将其映射回 f(x,y) = x+y。

此解决方案在大多数情况下有效,但请记住 pgfplots 无法真正确定所涉及的哪条线位于另一条线之上。

解决方案 2. 另一种解决方案是使用填充轮廓图,即使它最后只有两种颜色:

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{compat=1.15}

\begin{document}

\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x+y$}, 
xlabel=$x$, ylabel=$y$,
xmin=0, xmax=2,
ymin=0, ymax=2,
zmin=0, zmax=4,
colormap={zwocolor}{color=(green!50!black) color=(yellow)},
3d box=complete,]
\addplot3[
    contour filled={levels=1}, 
    point meta={x*y}, 
    domain=0:2] 
{x+y};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容