Matplotlib 3D散点图中指定每个点的颜色

Matplotlib 3D散点图中指定每个点的颜色

阅读更多:Matplotlib 教程

介绍

Matplotlib 是一个用于绘制数据可视化图形的 Python 库。它提供了多种绘图函数,并且支持生成多种类型的图表,比如柱状图、折线图、散点图等。在 Matplotlib 中,我们可以使用 plot 函数来绘制 2D 图表,使用 scatter 函数来绘制散点图,还可以使用 plot3Dscatter3D 函数来绘制 3D 图表和 3D 散点图。

在 3D 散点图中,我们常常需要根据数据点的某些特征来指定它们的颜色,比如根据数据点对应的类别、数量、属性或者其他自定义标识等。本文将介绍在 Matplotlib 中如何指定每个数据点的颜色,并提供示例代码。

方式1:使用 c 参数指定颜色

Matplotlib 中,我们可以使用 c 参数来指定数据点的颜色。c 参数可以接受各种类型的输入值,包括单个字符串、单个数字、数字列表或者字符串列表等等。下面的代码示例中,我们使用 numpy 库生成了五组随机的数据点,并为每组数据点分别指定了不同的颜色值。

import matplotlib.pyplot as plt
import numpy as np

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

x = np.random.standard_normal(50)
y = np.random.standard_normal(50)
z = np.random.standard_normal(50)

ax.scatter(x, y, z, c=['r', 'g', 'b', 'k', 'c'])

plt.show()
Python

上述代码中,我们首先创建了一个 figure 对象,然后创建了一个 3D 坐标系,接着生成了五组随机的数据点,并使用 scatter 函数将它们绘制到 3D 坐标系中。要指定每个数据点的颜色,我们只需要将每个数据点对应的颜色值指定到 c 参数中即可。在这个例子中,我们为五组数据点分别指定了 ‘r’、’g’、’b’、’k’、’c’ 这五个颜色值。

方式2:使用 colormap 按数值分配颜色

除了使用单个颜色值指定数据点的颜色外,我们也可以使用 colormap 来根据数据点的数值分配颜色值。在 Matplotlib 中,colormap 是一组预定义的颜色映射,可以根据数据点的数值大小将数据点分配到不同的颜色区域中。Matplotlib 中内置了多个常用的 colormaps,包括 ‘viridis’、’plasma’、’inferno’、’magma’、’cividis’ 等等。

下面的代码示例中,我们使用 np.random.rand 函数生成了三个随机的数组,并使用 scatter 函数将它们绘制到 3D 坐标系中。指定颜色映射时,我们可以将一个数值列表指定到 c 参数中,并使用 colormap 函数来将数值映射到对应的颜色区域中。

import matplotlib.pyplot as plt
import numpy as np

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

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

ax.scatter(x, y, z, c=x, cmap='viridis')

plt.show()
Python

上述代码中,我们为 x、y、z 三个数组分别生成了 50 个随机数,并使用 scatter 函数将它们绘制到 3D 坐标系中。在指定颜色映射时,我们将 x 数组指定到 c 参数中,并将 viridis 作为 colormap 值传递给 cmap 参数。这样,Matplotlib 就会根据每个数据点的 x 值大小将数据点分配到 viridis colormap 的相应颜色区域中。

除了 'viridis',我们还可以使用 Matplotlib 中的其他 colormap,如 'plasma''inferno''magma''cividis' 等等。这些 colormap 有不同的颜色区域和颜色分布方式,可以根据数据的特点进行选择和调整。

方式3:使用 Norm 类进行归一化

当数据点数值范围比较大或者差异比较大时,我们需要进行归一化操作,以便更好地展示数据点的颜色分布。在 Matplotlib 中,我们可以使用 Norm 类进行归一化,它提供了多种归一化方式,如线性归一化、对数归一化、指数归一化、二项分布归一化等等。

下面的代码示例中,我们使用 np.random.randn 函数生成了两个数组,并使用 scatter 函数将它们绘制到 3D 坐标系中。为了使数据更加清晰,我们对 y 数据进行了指数归一化处理,并将归一化之后的数值指定到 c 参数中。这里我们使用了 Matplotlib 中自带的 ‘plasma’ colormap。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize

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

x = np.linspace(0, 10, 50)
y = np.random.randn(50) * 100

norm = Normalize(vmin=y.min(), vmax=y.max())
colors = plt.cm.get_cmap('plasma')(norm(np.exp(y)))

ax.scatter(x, y, np.random.randn(50), c=colors)

plt.show()
Python

上述代码中,我们为 x 数组生成了 50 个等间距的数值,并为 y 数组生成了 50 个随机数,并将这些数据点绘制到 3D 坐标系中。为了对 y 数据进行指数归一化处理,我们首先使用 exp 函数对 y 数组中的数据进行指数转换,然后将转换后的数据使用 Normalize 类进行归一化,生成了一个归一化的实例 norm

在得到归一化实例后,我们使用 cm.get_cmap 函数获取 colormap 对象,并将归一化处理后的 y 数据指定到 colors 参数中。这样,Matplotlib 就会根据归一化后的 y 值大小将数据点分配到 plasma colormap 的相应颜色区域中。

总结

在本文中,我们介绍了在 Matplotlib 中如何指定 3D 散点图中每个数据点的颜色。主要包括使用 c 参数指定颜色、使用 colormap 按数值分配颜色和使用 Norm 类进行归一化等方式。这些方法在数据可视化中非常常用,可用于分析数据点的分布和特征,支持快捷简单地展示数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册