Matplotlib 3D 散点图

Matplotlib 3D 散点图

参考:matplotlib 3d scatter

在数据可视化领域,散点图是一种非常常见的图表类型,它可以展示不同变量之间的关系和分布情况。而在matplotlib这个Python绘图库中,我们还可以利用3D散点图来展示三个变量之间的关系,从而更加直观地理解数据。

在本文中,我们将深入探讨matplotlib中如何绘制3D散点图,包括如何创建3D坐标系、如何将数据点添加到图表中、如何设置颜色和大小等操作。

创建3D坐标系

在绘制3D散点图之前,我们首先需要创建一个3D坐标系。matplotlib提供了Axes3D对象来实现这一功能。下面是一个简单的例子:

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

plt.show()

Output:

Matplotlib 3D 散点图

上面的代码中,我们首先导入了需要的库,然后创建了一个figure对象和一个Axes3D对象,最后使用plt.show()显示了图表。

添加数据点

接下来,我们可以向3D坐标系中添加数据点。下面的例子展示了如何在3D散点图中添加一组数据点:

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

# 生成随机数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用np.random.rand()生成了100个随机数作为x、y、z轴的坐标,然后使用ax.scatter()将这些数据点添加到3D坐标系中。

设置颜色和大小

我们还可以根据需要设置数据点的颜色和大小。下面是一个例子:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c=colors, s=sizes)

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用了c参数设置了数据点的颜色,使用了s参数设置了数据点的大小。通过调整这两个参数的数值,我们可以自定义数据点的颜色和大小。

添加标签和标题

为了使图表更加直观,我们可以添加坐标轴标签和图表标题。下面是一个例子:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Scatter Plot')

plt.show()

Output:

Matplotlib 3D 散点图

通过ax.set_xlabel()ax.set_ylabel()ax.set_zlabel()ax.set_title()方法,我们可以为图表添加坐标轴标签和标题。

绘制多组数据点

在实际应用中,我们可能需要在同一个图表中绘制多组不同的数据点。下面是一个例子:

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

x1 = np.random.rand(100)
y1 = np.random.rand(100)
z1 = np.random.rand(100)

x2 = np.random.rand(100)
y2 = np.random.rand(100)
z2 = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x1, y1, z1, c='r', label='Group 1')
ax.scatter(x2, y2, z2, c='b', label='Group 2')

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.legend()

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们创建了两组随机数据,分别使用红色和蓝色绘制并添加了标签。最后使用ax.legend()方法显示图例。

3D直方图

除了散点图,我们还可以绘制3D直方图来展示数据的分布情况。下面是一个例子:

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

x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
z = np.random.normal(0, 1, 1000)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
hist, xedges, yedges = np.histogram2d(x, y, bins=20)

xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0

dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.ravel()

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, zsort='average')

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用np.histogram2d()函数生成了数据的二维直方图,然后使用ax.bar3d()方法绘制了3D直方图。

3D曲面图

除了散点图和直方图,我们还可以绘制3D曲面图来展示数据的平面分布情况。下面是一个例子:

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

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z)

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们首先使用np.linspace()生成了一组数据,然后使用np.meshgrid()创建了网格,最后使用ax.plot_surface()方法绘制了3D曲面图。

自定义视角

为了更好地展示数据,我们可以在3D散点图中自定义视角。下面是一个例子:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)

ax.view_init(elev=45, azim=120)

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用ax.view_init()方法设置了观察角度,elev参数控制上下旋转的角度,azim参数控制左右旋转的角度。

添加网格

为了更好地展示数据点在3D空间中的位置,我们可以在图表中添加网格。下面是一个例子:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)

ax.grid(True)

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用ax.grid(True)方法添加了网格,这样可以更清晰地展示数据在3D空间中的分布情况。

3D面积图

除了散点图、直方图和曲面图,我们还可以绘制3D面积图来展示数据点的面积分布情况。下面是一个例子:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x, y, z, cmap='viridis')

plt.show()

Output:

Matplotlib 3D 散点图

在上面的例子中,我们使用ax.plot_trisurf()方法绘制了一个3D三角面积图,并使用cmap='viridis'参数设置了颜色映射。

通过以上示例代码的介绍,相信你已经对matplotlib中如何绘制3D散点图有了更深入的了解。在实际应用中,你可以根据需求对样式、颜色、大小等进行自定义,以展示数据的特征和关系。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程