The mplot3d Toolkit

简介

正如,pyplot模块被用来绘制二维图,matplotlib使用mplot3d模块绘制三维图形,在mplot3d模块中存在

mpl_toolkits.mplot3d.axes3d
mpl_toolkits.mplot3d.axis3d
mpl_toolkits.mplot3d.art3d
mpl_toolkits.mplot3d.proj3d

四个大类,其中最常用的为mpl_toolkits.mplot3d.axes3d

在做图之前先要理解一下三维是什么?三维是在二维平面的基础上,加入了一个方向向量。可以这样理解:二维平面用x,y两个向量表示,三维空间则用x,y,z三个向量表示。来看两个简单测试实例,用matplotlib分别创建二维图像和三维图像:

import numpy as np
import matplotlib.pyplot as plt

x=np.array([1,2])
y=np.array([1,2])

plt.plot(x, y) #这里传入x, y的值

plt.show()

>>

 

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.gca(projection='3d')

x=np.array([1,2])
y=np.array([1,2])
z=np.array([1,2])
ax.plot(x, y, z, label='parametric curve')  #这里传入x, y, z的值
ax.legend()

plt.show()

>>

第二个实例在第一个实例的基础上,加入了一个向量z=np.array([1,2]),实现三维效果。我的理解是当z=np.array([0,0])的时候,它就是一个二维平面,只不过我们使用了一个三维的“画板”ax

以下是从matplotlib官方参考文档里翻译过来的内容

官方文档:https://matplotlib.org/tutorials/toolkits/mplot3d.html

入门指南

创建一个Axes3D对象与其他创建axes的方法类似,使用using the projection='3d'关键字创建一个matplotlib.figure.Figure对象,并且赋值给一个新的Axes3D类型的axes

 

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

 

在1.0.0新版本中,该方法是创建一个Axes3D类型的axes的首选方法

Line plots

Axes3D.plot(self, xs, ys, *args, zdir='z', **kwargs)可以绘制二维或三维数据

参数:

xs:一维数组,顶点的x坐标
ys:一维数组,顶点的y坐标
zs:标量或一维数组。顶点的z坐标,either one for all points or one for each point.
zdir:{'x','y','z'}当绘制2维图片的时候,使用z('x','y' or'z')

# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

import numpy as np
import matplotlib.pyplot as plt


plt.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')

# Prepare arrays x, y, z
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

ax.plot(x, y, z, label='parametric curve')
ax.legend()

plt.show()

 >>

 

 

 

posted @ 2019-08-18 10:23  vocus  阅读(376)  评论(0编辑  收藏  举报