欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三维图像的绘制

程序员文章站 2022-07-13 09:33:39
...

这一小节,我们来绘制三维图像。二维图像可以表示两个变量在空间中的分布,三维图像可以表示三个变量在空间中的分布。通过对三维数据进行可视化,使得我们可以更加直观的理解数据。

在中学的时候,我们接触的函数基本都是一元二次函数,如
y=x2+5y = x^2 + 5
它的几何表达如下图所示:
三维图像的绘制

到了大学的时候,我们接触到函数就变得更加复杂了,如二元二次函数,甚至有更加复杂(维度更高)的函数。
z=x2+y2+5z = x^2 + y^2 + 5
上述函数表达式的几何图如下图所示:
三维图像的绘制

三维图像的绘制过程:
别的不多说了,先绘制一个三维曲面,直接上代码。

import numpy as np
import matplotlib.pyplot as plt
#绘制三维图形必须导入的工具包
from mpl_toolkits.mplot3d import Axes3D

#创建三维数据
xx = np.arange(-5,5,0.1)
yy = np.arange(-5,5,0.1)
#使用np.meshgrid()方法,将X,Y转化二维平面数据。此处可以使用print(X)观察X,Y的真实面貌。
X,Y = np.meshgrid(xx,yy)
Z = np.sin(X) + np.cos(Y)


#开始绘制三维图形
#创建三维图形的窗口(布局)
fig = plt.figure(figsize = (5,5))
ax1 = Axes3D(fig)#还可以使用plt.axes(projection = '3d),两者的效果是一样的。

#使用plot_surface()绘制三维曲面图
ax1.plot_surface(X,Y,Z,cmap = 'rainbow')
#绘制等高线图
#参数说明:zdir:投影的方向,可以指定为x,y或z;
#offset:等高线图所在的位置,这个例子中,我们向z轴投影,所以offset指定为z方向的最小值。
ax1.contour(X,Y,Z,zdir = 'z',offset = -2,cmap = 'rainbow')

如下图所示,底部是该函数的等高线图。
三维图像的绘制
案例演示
以iris数据集为例,来展示各个样本在空间中的分布。由于该数据集有四个变量,我们选择其中的三个来进行展示。

iris数据集链接:
链接:https://pan.baidu.com/s/1h9TpTuz_7iBPk7WmpZdn8w
提取码:pr9p

#读取数据集
columns = ['petal length','petal width','calyx length','calyx width','category']
iris = pd.read_csv('D:\\Py_dataset\\iris.data',names = columns,sep = ',')
#分离特征和标签
Y = iris['category'].values
X = iris.drop('category',axis = 1).values
#绘制样本在空间中的分布
fig = plt.figure(figsize = (6,6))
ax1 = Axes3D(fig)

for lab,color,category in zip(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'],['red','green','blue'],['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']):
#三维散点图使用的是scatter3D
    ax1.scatter3D(X[Y == lab,0],#第一个特征
               X[Y == lab,1],#第二个特征
               X[Y == lab,2],#第三个特征
               label = category,#样本的标签
               c = color)
ax1.set_xlabel('petal length')
ax1.set_ylabel('petal width')
ax1.set_zlabel('calyx length')
ax1.legend(loc = 'lower right')

三维图像的绘制

三维图形绘制小结:
1.数据可视化贯穿于数据分析过程的始终,便于我们更加直观的理解数据。
2.绘图的过程是一个不断积累的过程,现实世界中的图形非常繁多,总会有我们不认识的。对于以前没有碰到过图形,我们可以直接在网上搜索,基本上都有模板可以参考。