我正在尝试绘制一些类似这样的内容:
我正在使用以下代码:
\begin{tikzpicture}
\begin{axis}[
grid=major]
\addplot3[
surf,
]
coordinates {
(1,0,0)
(0,1,0)
(0,0,1)
};
\end{axis}
\end{tikzpicture}
但没有得到预期的结果,有什么提示可以解决此问题吗?
答案1
编辑版本:插入轴刻度
刻度标签的定位有点“脆弱”:根据您在宏中设置的值,您可能会得到丑陋的结果\tdplotsetmaincoords
。此外,代码变得越来越复杂,因此对于更复杂的图形,最好使用pgfplots
。
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{130}
\begin{tikzpicture}[tdplot_main_coords]
\def\laxis{5}
\def\ltriangle{3}
\def\ltick{.2}
%%% axes
\draw [->] (0,0,0) -- (\laxis,0,0) node [below] {$x$};
\draw [->] (0,0,0) -- (0,\laxis,0) node [right] {$y$};
\draw [->] (0,0,0) -- (0,0,\laxis) node [left] {$z$};
%%% axes ticks
\pgfmathtruncatemacro{\nticks}{floor(\laxis)-1}
\begin{scope}[
help lines,
every node/.style={inner sep=1pt,text=black}
]
\foreach \coord in {1,...,\nticks} {
\draw (\coord,\ltick,0) -- ++(0,-\ltick,0) -- ++(0,0,\ltick)
node [pos=1,left] {\coord};
\draw (\ltick,\coord,0) -- ++(-\ltick,0,0) -- ++(0,0,\ltick)
node [pos=1,right] {\coord};
\draw (\ltick,0,\coord) -- ++(-\ltick,0,0) -- ++(0,\ltick,0)
node [at start,above right] {\coord};
}
\end{scope}
%%% figure
\filldraw [opacity=.33,red] (\ltriangle,0,0) -- (0,\ltriangle,0)
-- (0,0,\ltriangle) -- cycle;
\end{tikzpicture}
\end{document}
第一个版本
如果您只是想要一些与您发布的内容类似的东西,您可以使用该tikz-3dplot
包。
宏\tdplotsetmaincoords{<angle1>}{<angle2>}
可以让您选择图形的“视点”(稍微思考一下角度值以获得所需的结果。)
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{130}
\begin{tikzpicture}[tdplot_main_coords]
\def\laxis{5}
\def\ltriangle{3}
\begin{scope}[->,red]
\draw (0,0,0) -- (\laxis,0,0) node [below] {\textcolor{blue}{$x$}};
\draw (0,0,0) -- (0,\laxis,0) node [right] {\textcolor{blue}{$y$}};
\draw (0,0,0) -- (0,0,\laxis) node [left] {\textcolor{blue}{$z$}};
\end{scope}
\filldraw [opacity=.5,green] (\ltriangle,0,0) -- (0,\ltriangle,0) --
(0,0,\ltriangle) -- cycle;
\end{tikzpicture}
\end{document}
答案2
您几乎已经掌握了:使用patch
而不是surf
。两者相同,但输入格式不同:patch
接受单个面片段(默认为三角形),而surf
输入时需要矩阵。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
grid=major]
\addplot3[
patch,
]
coordinates {
(1,0,0)
(0,1,0)
(0,0,1)
};
\end{axis}
\end{tikzpicture}
\end{document}
或者,用所有面孔:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
grid=major]
\addplot3[
patch,
]
coordinates {
% diagonal:
(1,0,0)
(0,1,0)
(0,0,1)
% bottom:
(0,0,0)
(0,1,0)
(1,0,0)
% side 1
(0,0,0)
(0,0,1)
(1,0,0)
% side 2
(0,0,0)
(0,0,1)
(0,1,0)
};
\end{axis}
\end{tikzpicture}
\end{document}
颜色根据 Z 坐标确定,请参阅手册以了解如何采用颜色。
答案3
这可能对我们中的一些人来说有用,所以这是另一种在三维中绘制单纯形的方法,
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=0.75*\textwidth,
axis lines=middle,
axis equal,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
xmin=0,
xmax=1.25,
ymin=0,
ymax=1.25,
zmin=0,
zmax=1.25,
xtick={0,1},
ytick={0,1},
ztick={0,1},
view={135}{30}]
\addplot3[patch, color=blue!25, fill opacity=0.25, faceted color=black, line width=0.5pt] coordinates{(1,0,0) (0,1,0) (0,0,1)};
\end{axis}
\end{tikzpicture}
\end{document}
这个想法是为了能够调整外线颜色以及填充颜色和不透明度,以便看到轴穿过单纯形。
罗曼