在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()
在this image中,格子大小为30,您可以看到备用行被垂直压扁:
效果不是很显着,但在同一个六边形图的this magnified view中,但格子大小为80,小行的大小几乎是大行的一半。 (生成的样本数据也开始与网格错位,但这是一个不重要的工件。)
hexbin文档显示:
gridsize:[100 |整数]
x方向上的六边形数量,默认为100.选择y方向上相应的六边形数量,使得六边形近似规则。或者,gridsize可以是一个元组,其中包含两个元素,用于指定x方向和y方向上的六边形数量。
它只保证六边形“近似”规则,但似乎,特别是在上面的80-gridsize图像的情况下,通过减少行数这么小的行,六边形可以更接近常规可以扩大并使其更加规律。或者,正常大小的行可以垂直收缩,而小的行可以垂直放大,保持所有行的高度相同,即使瓦片不是规则形状。
这种不规则的原因是什么,可以避免吗?
答案 0 :(得分:6)
线宽:[无|标量]
如果为None,则默认为rc lines.linewidth。 请注意,这是一个元组,如果您设置了linewidths参数 必须按照要求将其设置为一系列浮点数 RegularPolyCollection。
控制的其他关键字参数 收藏属性:
edgecolors:[无| '没有'| mpl颜色|颜色序列]
如果'无', 绘制边缘的颜色与填充颜色相同。这是 默认情况下,因为它避免了六边形之间难看的未上色像素。
如果为None,则以默认颜色绘制轮廓。
如果matplotlib颜色arg或rgba元组序列,则绘制 指定颜色的轮廓。
通过将线宽设置为(0,),我暴露了难看的未上漆的像素,但我的六边形大小都相同。看起来有些行的六边形位于更高的层中,并且在相邻的行上突出过大的边框。线宽值(1,)给出了我之前看到的不均匀结果,因此它可能是默认值。 0到1之间的线宽(我使用的是0.25)覆盖了未上漆的像素而没有引起太多重叠,从而产生更好的图。但是,这仅在通过savefig()以高于默认值的DPI(我使用dpi = 300)保存图像时发生。调用show()或使用默认DPI保存会生成未显示未上漆像素的图。因此,虽然有效,但这种解决方法有些局限。