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