Matplotlib绘图库入门(六):3D图形

在科学计算中,三维的图形经常会出现,为了更加容易理解三维图形,用图像的形式把它展现出来是一种较好的方法。

Matplotlib 中也能够方便的绘制3d图形,mplot3DMatplotlib 中的一个3d图像模型,使用Axes3D 绘制3d的图形,给上三个坐标x,y,z, 在坐标中体现了图形的形状,如果缺失了哪一维的坐标后,则默认为0。

和二维图形不同的是需要使用 Axes3D 创建出一个三维的坐标轴出来。下图使用scatter 绘制三维的点图。

# libraries
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Dataset
df = pd.DataFrame({'X': range(1, 101), 'Y': np.random.randn(100) * 15 + range(1, 101),
                   'Z': (np.random.randn(100) * 15 + range(1, 101)) * 2})

# plot
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(df['X'], df['Y'], df['Z'], c='orange', s=60)

plt.show()

随机的生成3个坐标的位置,通过Axes3D 初始化出 3维坐标,同样的通过 scatter 进行绘制。

3D图像和2D图像的设置差不多一样,没有太多的区别,3D图像还能绘制哪一些图像呢?可以参考一下官方的文档 https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html

plot_surface 也是最经常见的3D图形:

通过 scipy 中的 stats 库引进高斯分布的计算公式,绘制3d高斯分布,

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
rv = stats.multivariate_normal([0, 0], cov=1)

x, y = np.mgrid[-3:3:.15, -3:3:.15]
ax.plot_surface(x, y, rv.pdf(np.dstack((x, y))), rstride=1, cstride=1)
ax.set_zlim(0, 0.2)

plt.show()

高斯分布,如下图所示:

更多3D图形的绘制,可以继续的参看mplot3D 的官网, https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html

转载请标明来之:http://www.bugingcode.com/

更多教程:阿猫学编程


来自您的鼓励

如果您感觉这一系列的教程,读后有点收获,并对知识有点了解,不妨小额捐助我一下,让我有动力继续写出更多好文章;或者在评论区留下你的意见。