我想从 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}