如何使用 Matplotlib 在 Python 中渲染 3D 直方图?

2025年1月5日 | 阅读 5 分钟

通过 3D 直方图可视化信息可以帮助您更深入地了解数据集中因素的分布和关系。可以使用 Python 的 Matplotlib 库创建可视化工具,例如 3D 直方图。利用 Matplotlib 的 mpl_toolkits.mplot3d 模块,您可以快速轻松地创建满足您需求的 3D 直方图。

使用 Matplotlib 渲染 3D 直方图的步骤

现在,让我们讨论一下将帮助我们使用 Matplotlib 库在 Python 中渲染 3D 直方图的步骤。

步骤 1:导入必要的库

首先,加载必要的库:用于绘图的 Matplotlib 的 pyplot 模块和用于数值计算的 NumPy。

  • Numpy:此库用于数值计算,包括创建随机数据和操作数组。它通常导入为 np。
  • matplotlib.pyplot(导入为 plt):此模块提供了与 MATLAB 类似的 Python 绘图接口。
  • mpl_toolkits.mplot3d:Matplotlib 的这个子模块提供了 3D 绘图功能。

步骤 2:生成数据

然后,您将创建一些示例数据进行绘制。为演示起见,可以以编程方式生成或从数据集中获取。在此,我们为 3D 直方图生成样本数据。您可以使用真实数据集中的真实信息,或为演示目的生成合成信息。在这种情况下,我们使用 NumPy 的 random.normal 函数生成随机数据,该函数会创建一个来自正态(高斯)分布的随机数数组。

步骤 3:创建 3D 直方图

现在,您将使用 Matplotlib 创建一个 3D 直方图。这包括设置图形并添加 3D 子图。

  • 首先,我们使用 plt.figure() 创建一个图形。接下来,我们使用 fig.add_subplot(111, projection='3d') 添加一个 3D 子图。
  • 接下来,我们使用 np.histogram2d 计算两个数据样本的双变量直方图,这有助于生成直方图数据。它会返回直方图以及每个维度上的 bin 边缘。
  • 然后,将要绘制的条形的尺寸(dx, dy, dz)和锚点位置(xpos, ypos, zpos)创建为数组。这些数组指定了直方图中每个条形的大小和位置。
  • 最后,我们使用 ax.bar3d 绘制图形的 3D 条形。我们将位置和尺寸数组以及可选参数(如 zsort,它控制条形的 z 排序)作为输入传递。

代码

输出

How to Render 3D Histograms in Python Using Matplotlib?

步骤 4:自定义图形(可选)

创建图形后,您可以根据自己的喜好进行修改。这可能包括更改标题、轴标签、颜色、透明度、bin 估计等元素。例如,要分别设置 x、y 和 z 轴的标签,请调用 ax.set_xlabel、ax.set_ylabel 和 ax.set_zlabel。同样,可以使用 ax.set_title 设置图形标题。

步骤 5:显示绘图

最后,我们使用 plt.show() 显示图形。此命令会显示包含 3D 直方图的图形窗口。

让我们更详细地讨论自定义,并查看一些可以改进 3D 直方图图形的其他选项。

  1. 调整 bin 大小:您可以使用 np.histogram2d 函数的 bins 参数来修改直方图中 bin 的大小和数量。此选项可确定每个维度中的 bin 数量。
  2. 颜色和透明度:可以使用 axe.bar3d 函数的 colour 和 alpha 参数来更改直方图中条形的颜色和透明度。这使您能够创建能够有效传达数据并且美观的图形。
  3. 标签和标题:通过包含清晰的标题和说明性轴标签,可以提高图形的连贯性和清晰度。要分别设置 x、y 和 z 轴的标签,请使用 ax.set_xlabel、ax.set_ylabel 和 ax.set_zlabel。要设置图形的标题,请使用 ax.set_title。
  4. 更改视角:Matplotlib 允许您交互式地更改 3D 图形的视角。您可以使用 ax.view_init(elev, azim) 以编程方式设置仰角和方位角,或者使用鼠标旋转图形以获得不同的视图。
  5. 自定义限制:您可以修改轴的限制,以关注特定数据区域。为了分别设置 x、y 和 z 轴的限制,请使用 ax.set_xlim、ax.set_ylim 和 ax.set_zlim。
  6. 包含颜色条:如果条形高度代表一个重要数字(例如频率或密度),您可以包含一个颜色条以提供视觉参考。先绘制直方图,然后使用 plt.colorbar 可以实现这一点。
  7. 网格线和刻度:为了使图形更易于检查,请添加网格线并修改每个轴上的刻度标记。要修改刻度设置,请使用 ax.xaxis.set_tick_params、ax.yaxis.set_tick_params 和 ax.zaxis.set_tick_params。您还可以使用 ax.grid(True) 来显示网格线。
  8. 保存图形:您可以使用 plt.savefig 将完成的图形以多种格式(包括 PNG 和 PDF)保存到文件中。

总之,使用 Matplotlib 在 Python 中创建 3D 直方图提供了一种强大的方法来可视化数据集中变量之间的分布和关系。通过遵循概述的步骤并利用可用的自定义选项,您可以生成富有洞察力且视觉吸引力的图形。从调整 bin 大小和颜色到添加标签、标题和颜色条,有许多方法可以定制图形以有效传达您的数据。此外,通过更改视角交互式探索图形的能力为分析提供了额外的灵活性。无论您是探索数据以获取见解,还是向他人展示发现,3D 直方图都可以作为 Python 中数据可视化探索的宝贵工具。