前面我们讲的是用gnuplot来绘制函数图像,对于gnuplot使用得很熟练的人来说,确实比较方便。这里我要介绍另外一种不依赖gnuplot的函数绘制方法,也就是纯tikz方法。这里用到的包是pgfplots,前面讲数据分析时讲过这个包。使用pgfplots绘图,要将图置于axis环境下。
命令语法
\addplot[参数]{函数}.,主要参数有颜色,定义域等等。
axis lines=left,是用传统坐标轴代替默认的方框。除了left还有以下取值:right, box, center, none。数学中一般使用center,这样坐标轴的(0,0)点在图正中央。
axis equal,一般情况下,x轴和y轴比例不是1:1的。这个选项让x轴和y轴强行1:1.
2D举例
我先拿个例子来说:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc,angles,quotes}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
% density of Normal distribution:
\addplot [
black,
domain=-4:4,
smooth
]
{sinh(x)};
\end{axis}
\end{tikzpicture}
\end{document}
效果如下:
3D绘图
对于立体几何研究来说,3D绘图是刚需。3D绘图也简单,就是改用addplot3命令就好了,如我要绘制一个球面,可以这样写代码:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=12cm,compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x,ylabel=y]
\addplot3 [black,domain=-2:2,domain y=-2:2,surf]{sqrt(16-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{document}
绘制结果如下:
参数方程3D绘图
上例的球面是不完全的,如果定义域扩大呢?将上面的x和y的定义域扩大,我们看看效果:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=12cm,compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x,ylabel=y]
\addplot3 [black,domain=-4:4,domain y=-4:4,surf]{sqrt(16-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{document}
一编译,直接报错了哈,如图:
因为
x
=
4
,
y
=
4
x=4,y=4
x=4,y=4的时候,是没有定义域的,这个时候是给负数开根号了,所以报错了,怎么办呢?我们可以用参数方程。复习下球的参数方程:
{
x
=
r
⋅
s
i
n
(
u
)
⋅
c
o
s
(
v
)
y
=
r
⋅
s
i
n
(
u
)
⋅
s
i
n
(
v
)
z
=
r
⋅
c
o
s
(
u
)
\begin{cases} x=r\cdot sin(u)\cdot cos(v)\\ y=r\cdot sin(u)\cdot sin(v)\\ z=r\cdot cos(u) \end{cases}
⎩
⎨
⎧x=r⋅sin(u)⋅cos(v)y=r⋅sin(u)⋅sin(v)z=r⋅cos(u)
然后用参数方程写代码吧:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=12cm,compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x,ylabel=y]
\addplot3 [domain=0:360,domain y=0:360,surf,z buffer=sort,
variable=\u, variable y=\v](
{4*sin(u)*cos(v)},
{4*sin(u)*sin(v)},
{4*cos(u)});
\end{axis}
\end{tikzpicture}
\end{document}
这个球还是蛮标准的,给大家看看: