简述
使用Matplotlib画简单的折线图曲线图往往比较直接,在已知
y
=
f
(
x
)
y=f(x)
y=f(x)的表达式的情况下,即可直接使用plt.plot(x, f(x))
绘制。而对于较为复杂的函数如
y
2
=
f
(
x
)
y^2 = f(x)
y2=f(x) 往往需要借助参数方程或者分次画图的方式。
1. 绘制圆
不使用Matplotlib内置的画圆函数绘制 x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1 的图形
-
方法一:使用参数方程可将原圆表示为
{ x = c o s ( t ) y = s i n ( t ) t ∈ ( 0 , 2 π ) \begin{cases}x=cos(t) \\ y = sin(t)\\ t\in(0, 2\pi) \end{cases} ⎩ ⎨ ⎧x=cos(t)y=sin(t)t∈(0,2π)import numpy as np import matplotlib.pyplot as plt plt.figure(figsize=(6, 6)) # 画布建立为方形,成图看起来比较具体 theta = np.linspace(0, 2*np.pi, 100)# 参数的取值范围 x = np.cos(theta) # x的参数方程 y = np.sin(theta) # y的参数方程 plt.plot(x, y) plt.show()
-
方法二:将x视为自变量,分两次画上半圆和下半圆
{ y = 1 − x 2 y = − 1 − x 2 x ∈ ( − 1 , 1 ) \begin{cases} y = \sqrt{1-x^2} \\ y = -\sqrt{1-x^2} \\ x \in (-1, 1) \end{cases} ⎩ ⎨ ⎧y=1−x2y=−1−x2x∈(−1,1)import numpy as np import matplotlib.pyplot as plt plt.figure(figsize=(5, 5)) x = np.linspace(-1, 1, 1000) y = np.sqrt(1 - x**2) plt.plot(x, y) # 上半圆 plt.plot(x, -y) # 下半圆 plt.show()
2. 绘制空间曲线
空间曲线的方程为:
{
x
2
+
y
2
=
1
2
x
+
3
z
=
6
\begin{cases} x^2 + y^2 = 1 \\ 2x + 3z = 6 \end{cases}
{x2+y2=12x+3z=6
-
方法一:使用参数方程,可将原方程表示为
{ x = c o s ( t ) y = s i n ( t ) z = 1 3 ( 6 − 2 x ) t ∈ ( 0 , 2 π ) \begin{cases} x = cos(t) \\ y = sin(t) \\ z = {1\over3}(6 - 2x) \\ t \in (0, 2 \pi) \end{cases} ⎩ ⎨ ⎧x=cos(t)y=sin(t)z=31(6−2x)t∈(0,2π)import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D figure = plt.figure(figsize=(5, 5)) ax : Axes3D = figure.add_subplot(projection = '3d') # 创建三维坐标轴 theta = np.linspace(0, 2*np.pi, 100) # 参数取值范围 x = np.cos(theta) y = np.sin(theta) z = (6 - 2*x) / 3 # 参数方程 ax.plot(x, y, z) # 绘图 plt.show()
-
方法二:将x视为自变量,分两次画前半部和后半部
{ y = ± 1 − x 2 z = 1 3 ( 6 − 2 x ) x ∈ ( − 1 , 1 ) \begin{cases} y = \pm\sqrt{1-x^2} \\ z = {1 \over 3}(6 - 2x) \\ x \in (-1, 1) \end{cases} ⎩ ⎨ ⎧y=±1−x2z=31(6−2x)x∈(−1,1)import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D figure = plt.figure(figsize=(5, 5)) ax : Axes3D = figure.add_subplot(projection = '3d') # 创建三维坐标轴 x = np.linspace(-1, 1, 100) # 取值范围 y = np.sqrt(1 - x**2) z = (6 - 2*x)/3 ax.plot(x, y, z) # 前半部 ax.plot(x, -y, z) # 后半部 plt.show()
如有错误, 还请指正, 持续更新ing