在 matplotlib 中制作 hexbin 图时,我发现交替排列的六边形图块具有不同的大小,有时明显不同。这段演示代码展示了效果:
from matplotlib import pyplot as plt
from matplotlib import cm as cm
from matplotlib import mlab as ml
import numpy as np
n = 1e5
x = y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z1 = ml.bivariate_normal(X, Y, 2, 2, 0, 0)
Z2 = ml.bivariate_normal(X, Y, 4, 1, 1, 1)
ZD = Z2 - Z1
x = X.ravel()
y = Y.ravel()
z = ZD.ravel()
plt.subplot(111)
plt.hexbin(x, y, C=z, gridsize=30, cmap=cm.jet, bins=None)
plt.axis([x.min(), x.max(), y.min(), y.max()])
cb = plt.colorbar()
cb.set_label('mean value')
plt.show()
在这张图片中,gridsize 为 30,您可以看到交替的行在垂直方向上被挤压了一点:
效果不是很显着,但在这个相同六边形图但网格大小为 80 的放大视图中,小行几乎是大行大小的一半。(生成的样本数据也开始与网格不对齐,但这是一个不重要的工件。)
hexbin 文档内容如下:
网格大小:[ 100 | 整数 ]
x 方向的六边形数量,默认为 100。选择 y 方向的相应六边形数量,使六边形近似规则。或者,gridsize 可以是一个具有两个元素的元组,指定 x 方向和 y 方向上六边形的数量。
它只保证六边形是“近似”规则的,但似乎,特别是在上面的 80-gridsize 图像这样的情况下,通过减少行数可以使六边形更接近规则,因此可以放大小行并且变得更规律。或者,正常大小的行可以垂直缩小,而小的行会垂直放大,保持所有行的高度相同,即使瓷砖不是规则形状的。
这种不规则的原因是什么,可以避免吗?