Matplotlib 3D散点图中指定每个点的颜色
阅读更多:Matplotlib 教程
介绍
Matplotlib
是一个用于绘制数据可视化图形的 Python 库。它提供了多种绘图函数,并且支持生成多种类型的图表,比如柱状图、折线图、散点图等。在 Matplotlib
中,我们可以使用 plot
函数来绘制 2D 图表,使用 scatter
函数来绘制散点图,还可以使用 plot3D
和 scatter3D
函数来绘制 3D 图表和 3D 散点图。
在 3D 散点图中,我们常常需要根据数据点的某些特征来指定它们的颜色,比如根据数据点对应的类别、数量、属性或者其他自定义标识等。本文将介绍在 Matplotlib
中如何指定每个数据点的颜色,并提供示例代码。
方式1:使用 c
参数指定颜色
在 Matplotlib
中,我们可以使用 c
参数来指定数据点的颜色。c
参数可以接受各种类型的输入值,包括单个字符串、单个数字、数字列表或者字符串列表等等。下面的代码示例中,我们使用 numpy
库生成了五组随机的数据点,并为每组数据点分别指定了不同的颜色值。
上述代码中,我们首先创建了一个 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
函数来将数值映射到对应的颜色区域中。
上述代码中,我们为 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。
上述代码中,我们为 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
类进行归一化等方式。这些方法在数据可视化中非常常用,可用于分析数据点的分布和特征,支持快捷简单地展示数据。