Python绘制3D图像

PYTHON 十月 28, 2019

Python绘制3D图像

文章字数 15k 阅读约需 14 mins. 阅读次数 1000000

首先导入需要的第三方库

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

然后创建数据集

1
2
3
4
5
6
7
8
9
dataSet = [[91, 85, 52, 2], [40, 55, 13, 1], [41, 36, 93, 4], [52, 10, 63, 4], [1, [52, 74, 40, 2], [70, 7, 1, 1], 
[94, 97, 82, 2], [15, 100, 52, 3], [6, [67, 36, 56, 4], [84, 41, 11, 2], [55, 84, 97, 2], [5, 63, 94, 3],
[1 [67, 46, 5, 2], [0, 76, 5, 1], [8, 57, 13, 1], [89, 95, 67, 2], [95, 467, 52, 94, 4], [64, 93, 79, 2],
[23, 61, 84, 3], [78, 10, 34, 4], [32, [20, 42, 27, 1], [77, 62, 38, 2], [97, 17, 52, 4], [18, 98, 58, 3],
[5 [24, 14, 90, 4], [48, 75, 37, 2], [76, 97, 100, 2], [4, 1, 4, 1], [19,, [36, 68, 70, 3], [30, 33, 7, 1],
[89, 70, 70, 2], [98, 71, 69, 2], [3], [57, 36, 95, 4], [34, 87, 24, 3], [1, 78, 66, 3], [76, 27, 52, 4], [],
[27, 33, 77, 3], [69, 83, 80, 2], [27, 38, 3, 1], [94, 20, 68, 4], [4], [31, 71, 51, 3], [28, 4, 65, 1],
[41, 57, 85, 3], [65, 1, 54, 4], [1], [90, 86, 15, 2], [85, 65, 33, 2], [3, 23, 35, 1], [0, 6, 34, 1],
[2, [60, 21, 95, 4], [69, 18, 34, 4], [10, 39, 33, 1]]

由于本实例中的数据集包含四个种类的散点,因此需要分别创建四个散点数据集来分开展示

1
2
3
4
dataSet1 = []
dataSet2 = []
dataSet3 = []
dataSet4 = []

分别向4个类别散点集中添加点,将每个点坐标列表末尾的类别数字去除

1
2
3
4
5
6
7
8
9
for point in list:
if point[-1] == 1:
dataSet1.append(point[:-1])
elif point[-1] == 2:
dataSet2.append(point[:-1])
elif point[-1] == 3:
dataSet3.append(point[:-1])
else:
dataSet4.append(point[:-1])

分别创建坐标轴数据集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x1 = np.array(dataSet1)[:, 0]
y1 = np.array(dataSet1)[:, 1]
z1 = np.array(dataSet1)[:, 2]

x2 = np.array(dataSet2)[:, 0]
y2 = np.array(dataSet2)[:, 1]
z2 = np.array(dataSet2)[:, 2]

x3 = np.array(dataSet3)[:, 0]
y3 = np.array(dataSet3)[:, 1]
z3 = np.array(dataSet3)[:, 2]

x4 = np.array(dataSet4)[:, 0]
y4 = np.array(dataSet4)[:, 1]
z4 = np.array(dataSet4)[:, 2]

创建图像

1
fig = plt.figure()

创建3D图像对象

1
ax = Axes3D(fig)

设计散点图属性

1
2
3
4
ax.scatter(x1, y1, z1, marker="*", c='r', label='class1')
ax.scatter(x2, y2, z2, marker="*", c='g', label='class2')
ax.scatter(x3, y3, z3, marker="*", c='b', label='class3')
ax.scatter(x4, y4, z4, marker="*", c='y', label='class4')

绘制图例,best表示图例位置为最适位置

1
ax.legend(loc='best')

添加坐标轴(注意顺序为Z,Y,X)

1
2
3
ax.set_zlabel('Z', fontdict={'size': 15, 'color': 'red'})
ax.set_ylabel('Y', fontdict={'size': 15, 'color': 'red'})
ax.set_xlabel('X', fontdict={'size': 15, 'color': 'red'})

展示

1
plt.show()
0%