本节书摘来自异步社区《python数据可视化编程实战》一书中的第5章,第5.3节,作者[爱尔兰]igor milovanović ,颛青山 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
像3d柱状图一样,我们可能想创建3d直方图。3d直方图可以用来很容易地识别3个独立变量之间的相关性。可以用它们来从图像中提取信息,其中第三个维度可以是所分析的图像的(x, y)空间通道的强度。
本节将学习如何创建3d直方图。
回顾一下,直方图表示的是一些值在特定列(通常叫做“bin”)中的发生率。那么,三维直方图表示的是在一个网格中的发生率。网格是矩形的,表示的是在两列中关于两个变量的发生率。
在这个计算过程中,我们将进行如下操作。
1.使用numpy,因为其拥有计算两个变量的直方图的函数。
2.用正态分布函数生成x和y,但是给它们提供不同的参数,以便能区分结果直方图的相互关系。
3.用相同的数据集合绘制散点图,展示散点图和3d直方图显示上的差异。
下面是实现上述步骤的代码。
上述代码生成如图5-3所示的图形。

我们用np.histogram2d生成了一个直方图,该方法返回了直方图(hist)、x bin边界和y bin边界。
bar3d函数需要x, y空间的坐标,因此需要计算出一般的矩阵坐标,对此我们使用np.meshgrid函数把x和y位置的向量合并到2d空间网格中(矩阵)。我们可以使用它在xy平面位置上绘制矩形条。
变量dx和dy表示每一个矩形条底部的宽度,我们想把它设置为常数,因此我们为xy平面的每一个位置给定的值为0.1 个点的宽度。
z轴上的值(dz)实际上是计算机直方图(在变量hist中),它表示在一个特定的bin中一般的x和y样本的个数。
接下来在散点图(图5-3)中显示了一个2d坐标轴,也呈现了两组相似但起始参数不同的分布间的相互关系。
有时候,3d给予我们更多的信息,并以一个更好的方式让我们来理解数据所包含的内容。然而在更多情况下,3d可视化比2d更加让人感到迷惑,所以在舍弃2d选择3d之前最好慎重考虑。