Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matplotlib hexbin中的不规则瓷砖尺寸_Matplotlib_Size_Tile - Fatal编程技术网

matplotlib hexbin中的不规则瓷砖尺寸

matplotlib hexbin中的不规则瓷砖尺寸,matplotlib,size,tile,Matplotlib,Size,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,

在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时,您可以看到交替行在垂直方向上被压扁了一点:

效果不是很显著,但在同一个hexbin图中,但网格大小为80,小行的大小几乎是大行的一半。(生成的样本数据也开始与网格不一致,但这是一个不重要的工件。)

hexbin文档内容如下:

网格大小:[100 |整数]

x方向上的六边形数,默认为100。选择y方向上相应数量的六边形,使六边形近似规则。或者,gridsize可以是一个元组,其中有两个元素指定x方向和y方向上六边形的数量

它只能保证六边形是“近似”规则的,但看起来,特别是在上面的80网格大小的图像中,六边形可以通过减少行数而变得更接近规则,从而使小行可以放大并变得更规则。或者,正常大小的行可以垂直缩小,而较小的行可以垂直放大,使所有行保持相同的高度,即使瓷砖的形状不规则


这种不规则的原因是什么?它可以避免吗?

经过更多的实验,我想我已经找到了原因。hexbin的文档还提到:

线宽:[无|标量]

如果没有,则默认为rc lines.linewidth。 请注意,这是一个元组,如果设置linewidths参数,则 必须按照 定期收集

控制 集合属性:

edgecolors:[无|“无”| mpl颜色|颜色序列]

如果“无”, 以与填充颜色相同的颜色绘制边。这是 默认设置,因为它避免了六边形之间难看的未上漆像素。

如果没有,则以默认颜色绘制轮廓

如果matplotlib颜色参数或rgba元组序列,则绘制 指定颜色的轮廓

通过将线宽设置为(0,),我暴露了难看的未上漆像素,但六边形的大小都相同。似乎有些六边形行位于更高的层中,并且绘制时在相邻行上突出了过大的边界。线宽值(1,)给出了我以前看到的不均匀结果,因此它可能是默认值。线宽介于0和1之间(我使用的是0.25)会覆盖未上漆的像素,而不会造成太多重叠,从而生成更好的绘图。但是,只有通过savefig()以高于默认值的DPI保存图像时才会发生这种情况(我使用的是DPI=300)。调用show()或使用默认DPI保存会生成未绘制像素未覆盖的绘图。因此,虽然有效,但这种解决方法有些有限