3D plot with pgfplots
2,675
One approach could be using:
\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}
which seems to almost work, because I have an error (the same as here) and I cannot see why. If you change nan
(not-a-number) with 0, there is no error. Probably the shader is confused by the big number of NaN arounds...
As suggested by the OP, adding
restrict z to domain=-inf:inf,
to the axis
options does the trick:
(although the ragged end is not so nice...)
Related videos on Youtube
Author by
lala_12
Updated on October 09, 2020Comments
-
lala_12 about 3 years
I am trying to plot the function $U(x,y)=6*\ln(x) + \ln(y)$ for $x=1,...,4$ and $y=1,...,14-3*x$, however, I can't specify that the domain for $y$ is a function of $x$.
MWE:
\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}
How can I do this?
UPDATE:
I have tried to use
\pgfmathparse
and\pgfmathresult
, but I still can't get it to display the right surface.MWE:
\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}
-
Bobyandbob about 6 yearsMaybe helpful: tex.stackexchange.com/a/303151/124842 or tex.stackexchange.com/a/18779/124842.
-
lala_12 about 6 years@Bobyandbob I tried to follow the last approach, but I couldn't get it to work. I have updated my question with the new code.
-
-
lala_12 about 6 yearsAdding the line
restrict z to domain=-inf:inf
to\begin{axis}
does the trick. Thank you.