我正在尝试绘制半正定 2 乘 2 矩阵的锥体的 3D 表示。但是图的渐近行为使我限制了 z 的值(限制 z 命令)。但是,限制 z 的值会显示与图相交的 z=1 处的平面。如果我不限制 z 的值,无穷大极限会触发奇怪的行为...
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
ticks=none,
view={240}{20},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=-1:1]{(y^2)/x};
\end{axis}
\end{tikzpicture}
\end{document}
这是我在 z 中限制使用的代码。如果不绘制与 z=1 相交的平面,我如何才能得到相同的图?此外,如果您有任何想法可以使此图更清晰、更简洁,请随意提出。
谢谢。
答案1
还有另一个参数化。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
unbounded coords=jump,
x filter/.expression={x>1 ? nan : x},
ticks=none,
view={240}{20},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({y/x},{sqrt(y)},{x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({y/x},{-sqrt(y)},{x});
\draw [draw=black!50, samples=25] plot[variable=\x, domain=-1:1]
({1},{\x},{\x*\x});
\end{axis}
\end{tikzpicture}
\end{document}
您可以使用过滤器。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
unbounded coords=jump,
z filter/.expression={z>1 ? nan : z},
ticks=none,
view={240}{20},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=-1:1]{(y^2)/x};
\end{axis}
\end{tikzpicture}
\end{document}
更新:如果改变参数化,结果会看起来更好。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
unbounded coords=jump,
z filter/.expression={z>1 ? nan : z},
ticks=none,
view={240}{20},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{sqrt(y)},{(y)/x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{-sqrt(y)},{(y)/x});
\end{axis}
\end{tikzpicture}
\end{document}
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
unbounded coords=jump,
z filter/.expression={z>1 ? nan : z},
ticks=none,
view={240}{20},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{sqrt(y)},{(y)/x});
\addplot3[mesh, draw=black!50, samples=25, domain=0:1, y domain=0:1]
({x},{-sqrt(y)},{(y)/x});
\addplot3[draw=black!50,domain=-1:1] ({x^2},{x},1);
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我对上面的代码做了一些调整,以删除直线 (x=1,y=t,z=1 (参数 t))。下面的代码生成的图形正是我想要的。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=0.75*\textwidth,
axis lines=left,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
zmin=0,
zmax=1,
ticks=none,
view={240}{20},
unbounded coords=jump,
z filter/.expression={z>1 ? nan : z},
restrict z to domain*=0:1]
\addplot3[mesh, draw=black!50, line width=0.25pt, samples=30, domain=0:1, y domain=0:1]({x},{sqrt(y)},{y/x});
\addplot3[mesh, draw=black!50, line width=0.25pt, samples=30, domain=0:1, y domain=0:1]({x},{-sqrt(y)},{y/x});
\addplot3[variable=t, mesh, draw=black!50, domain=-1:1] ({t^2},{t},1);
\end{axis}
\end{tikzpicture}
\end{document}
感谢您的帮助。
罗曼