在matplotlib中制作六边形图时,我发现交替的六边形瓷砖行具有不同的大小,有时差别很大。以下演示代码显示了该效果:
在这张图片中,网格大小为30,在此可以看到交替的行在垂直方向上被压缩了一点:
效果并不是很明显,但在同样的六边形图但网格大小为80的放大视图中,小行的大小几乎只有大行的一半。(生成的示例数据也开始与网格失配,但这是一个无关紧要的现象。)
六边形文档读取如下:
gridsize:[100 | integer] x方向上的六边形数量,默认值为100。选择y方向上的相应数量以使六边形近似正则。或者,gridsize可以是一个包含两个元素的元组,指定x方向和y方向上的六边形数量。
它只保证六边形“近似”正则,但似乎特别是在像上面80网格大小的图像中,通过减少行数,可以使六边形更接近正则,从而可以放大并使小行更加正则。或者,可以将正常大小的行在垂直方向上缩小,同时将小行在垂直方向上放大,保持所有行的高度相同,即使瓷砖形状不规则。
这种不规则的原因是什么,是否可以避免?
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()
在这张图片中,网格大小为30,在此可以看到交替的行在垂直方向上被压缩了一点:
效果并不是很明显,但在同样的六边形图但网格大小为80的放大视图中,小行的大小几乎只有大行的一半。(生成的示例数据也开始与网格失配,但这是一个无关紧要的现象。)
六边形文档读取如下:
gridsize:[100 | integer] x方向上的六边形数量,默认值为100。选择y方向上的相应数量以使六边形近似正则。或者,gridsize可以是一个包含两个元素的元组,指定x方向和y方向上的六边形数量。
它只保证六边形“近似”正则,但似乎特别是在像上面80网格大小的图像中,通过减少行数,可以使六边形更接近正则,从而可以放大并使小行更加正则。或者,可以将正常大小的行在垂直方向上缩小,同时将小行在垂直方向上放大,保持所有行的高度相同,即使瓷砖形状不规则。
这种不规则的原因是什么,是否可以避免?