使用 pgfplots 绘制 3D 图

使用 pgfplots 绘制 3D 图

我正在尝试绘制函数 $U(x,y)=6*\ln(x) + \ln(y)$,其中 $x=1,...,4$ 和 $y=1,...,14-3*x$,但是我无法指定 $y$ 的定义域是 $x$ 的函数。

梅威瑟:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[view/h=40,colormap/violet]
    \addplot3[
        surf,
        %shader=interp,
        shader=flat,
        samples=50,
        domain=1:4,y domain=1:14-3*x] % it goes wrong here
        {6*ln(x) + ln(y)};
    \end{axis}
\end{tikzpicture}
\end{document}

我怎样才能做到这一点?


更新:

我曾尝试使用\pgfmathparse\pgfmathresult,但仍然无法让它显示正确的表面。

梅威瑟:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
    %view/h=80,
    colormap/cool,
    xlabel = $x$,
    ylabel = $y$,
    zlabel = {$U(x,y)$}
    ]

    \foreach \i in {1,...,4}{
        \pgfmathparse{14 - 3*\i};
    \addplot3[
        surf,
        shader=interp,
        %shader=flat,
        samples=50,
        domain=1:4,y domain=1:\pgfmathresult] 
        {6*ln(x) + ln(y)};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

答案1

一种方法是使用:

\addplot3[
    surf,
    %shader=interp,
    %shader=flat,
    samples=60,
    domain=1:4,
    y domain=1:14] 
    {y < 14-3*x ? 6*ln(x) + ln(y) : nan};
\end{axis}

似乎几乎工作,因为我有一个错误(与这里) 但我看不出为什么。如果你将nan(not-a-number) 更改为 0,则不会出现错误。着色器可能对周围大量的 NaN 感到困惑...

根据 OP 的建议,添加

restrict z to domain=-inf:inf, 

选项axis可以解决问题:

在此处输入图片描述

(虽然结局不太好……)

相关内容