3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

参考: 3D scatterplots in Python Matplotlib with hue colormap and legend

在数据可视化的世界中,3D 散点图是一种强大的工具,可以帮助我们理解和展示三维数据空间中的关系。使用 PythonMatplotlib 库,我们可以轻松创建这样的图表,并通过色调色彩映射(hue colormap)和图例增强图表的信息表达能力。本文将详细介绍如何在 Matplotlib 中创建和定制 3D 散点图,并提供多个示例代码来展示不同的功能和技巧。

基础设置

在开始绘制 3D 散点图之前,我们需要先安装并导入必要的库。Matplotlib 是最基本的库,而 mpl_toolkits.mplot3d 模块则提供了支持 3D 图形的功能。

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

创建基本的 3D 散点图

首先,我们来创建一个最基本的 3D 散点图。这需要使用 mpl_toolkits.mplot3d.Axes3D 类来创建一个 3D 坐标轴,然后使用 scatter 方法绘制散点。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_title("基本的 3D 散点图 - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

添加色调色彩映射

色调色彩映射可以帮助我们根据数据点的某个属性来区分颜色,从而更好地理解数据的分布。在下面的示例中,我们将使用数据点的 z 值来决定颜色。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
colors = z  # 使用 z 值作为颜色映射
scatter = ax.scatter(x, y, z, c=colors, cmap='viridis')
fig.colorbar(scatter, ax=ax, label='Z value')
ax.set_title("带色彩映射的 3D 散点图 - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

使用图例

为了使图表更易于理解,我们可以添加图例来标示不同的数据组。在下面的示例中,我们将根据数据点的一个额外属性(例如类别)来分组,并为每组数据使用不同的颜色和图例。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
categories = np.random.choice(['Category A', 'Category B', 'Category C'], size=100)
colors = {'Category A': 'r', 'Category B': 'g', 'Category C': 'b'}
for category in np.unique(categories):
    ix = np.where(categories == category)
    ax.scatter(x[ix], y[ix], z[ix], c=colors[category], label=category)
ax.legend()
ax.set_title("带图例的 3D 散点图 - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

结合色调色彩映射和图例

我们可以将色调色彩映射和图例结合起来,为不同类别的数据点使用不同的色彩映射。这样可以在同一个图表中展示更多层次的信息。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
categories = np.random.choice(['Category A', 'Category B', 'Category C'], size=100)
colormaps = {'Category A': 'Reds', 'Category B': 'Greens', 'Category C': 'Blues'}
for category in np.unique(categories):
    ix = np.where(categories == category)
    scatter = ax.scatter(x[ix], y[ix], z[ix], c=z[ix], cmap=colormaps[category], label=category)
    fig.colorbar(scatter, ax=ax, label=f'Z value - {category}')
ax.legend()
ax.set_title("结合色彩映射和图例的 3D 散点图 - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

高级定制

Matplotlib 提供了丰富的参数和方法来定制 3D 散点图。例如,我们可以调整标记的大小、透明度、边缘颜色等。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
sizes = np.abs(z) * 100  # 根据 z 值的绝对值调整大小
ax.scatter(x, y, z, s=sizes, alpha=0.5, edgecolors='w')
ax.set_title("高级定制的 3D 散点图 - how2matplotlib.com")
plt.show()

Output:

3D 散点图在 Python Matplotlib 中的应用:使用色调色彩映射和图例

结论

通过本文的介绍和示例代码,我们学习了如何在 Python 的 Matplotlib 库中创建和定制 3D 散点图。通过使用色调色彩映射和图例,我们可以更有效地传达数据的多维信息。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程