从 plt.hexbin 获取信息
Get information from plt.hexbin
我一直在使用 hexbing 来尝试改进 SPCF 方法,因此我需要从图中获取信息来修改数据,然后用新值重新绘制它。
我需要修改以重新绘制的最重要数据是每个单元格的点数和该网格单元格的 C 值。
有什么办法可以得到这样的数据?
matplotlib.pyplot.hexbin
returns a PolyCollection
对象,其方法 get_offsets
和 get_array
提供了您正在寻找的内容。来自 hexbin 文档:
Returns: PolyCollection
A PolyCollection defining the hexagonal bins.
PolyCollection.get_offsets
contains a Mx2 array containing the x, y positions of the M hexagon centers.
PolyCollection.get_array
contains the values of the M hexagons.
If marginals is True, horizontal bar and vertical bar (both PolyCollections) will be attached to the return collection as attributes hbar and vbar.
例子
例如,我将创建一个简单的 hexbin 图并获取 plt.hexbin
:
返回的 PolyCollection
对象
In [2]: x = np.linspace(1, 20, 500)
In [3]: y = np.log(x) + np.random.random(size=500) - 0.5
In [4]: coll = plt.hexbin(x, y, gridsize=20)
您可以浏览集合对象并获取 get_offsets()
和 get_array()
返回的数组:
In [23]: type(coll)
Out[23]: matplotlib.collections.PolyCollection
In [24]: offsets = coll.get_offsets()
In [25]: offsets
Out[25]:
array([[ 9.99999981e-01, -3.48964611e-01],
[ 9.99999981e-01, -3.91102264e-03],
[ 9.99999981e-01, 3.41142565e-01],
...
[ 1.95250000e+01, 2.58399089e+00],
[ 1.95250000e+01, 2.92904448e+00],
[ 1.95250000e+01, 3.27409806e+00]])
In [26]: arr = coll.get_array()
In [27]: arr
Out[27]:
masked_array(data=[ 2., 4., 0., ..., 7., 2., 4.],
mask=False,
fill_value=1e+20)
In [28]: offsets.shape
Out[28]: (472, 2)
In [29]: arr.shape
Out[29]: (472,)
您可以随心所欲地操作这些数组,然后使用 x、y 和 C
hexbin 的计数参数再次绘制它们。如果您不更改偏移量和 arr 的值,这将绘制完全相同的图像:
In [30]: plt.hexbin(offsets[:, 0], offsets[:, 1], C=arr, gridsize=20)
我一直在使用 hexbing 来尝试改进 SPCF 方法,因此我需要从图中获取信息来修改数据,然后用新值重新绘制它。
我需要修改以重新绘制的最重要数据是每个单元格的点数和该网格单元格的 C 值。
有什么办法可以得到这样的数据?
matplotlib.pyplot.hexbin
returns a PolyCollection
对象,其方法 get_offsets
和 get_array
提供了您正在寻找的内容。来自 hexbin 文档:
Returns:
PolyCollection
A PolyCollection defining the hexagonal bins.
PolyCollection.get_offsets
contains a Mx2 array containing the x, y positions of the M hexagon centers.PolyCollection.get_array
contains the values of the M hexagons.If marginals is True, horizontal bar and vertical bar (both PolyCollections) will be attached to the return collection as attributes hbar and vbar.
例子
例如,我将创建一个简单的 hexbin 图并获取 plt.hexbin
:
PolyCollection
对象
In [2]: x = np.linspace(1, 20, 500)
In [3]: y = np.log(x) + np.random.random(size=500) - 0.5
In [4]: coll = plt.hexbin(x, y, gridsize=20)
您可以浏览集合对象并获取 get_offsets()
和 get_array()
返回的数组:
In [23]: type(coll)
Out[23]: matplotlib.collections.PolyCollection
In [24]: offsets = coll.get_offsets()
In [25]: offsets
Out[25]:
array([[ 9.99999981e-01, -3.48964611e-01],
[ 9.99999981e-01, -3.91102264e-03],
[ 9.99999981e-01, 3.41142565e-01],
...
[ 1.95250000e+01, 2.58399089e+00],
[ 1.95250000e+01, 2.92904448e+00],
[ 1.95250000e+01, 3.27409806e+00]])
In [26]: arr = coll.get_array()
In [27]: arr
Out[27]:
masked_array(data=[ 2., 4., 0., ..., 7., 2., 4.],
mask=False,
fill_value=1e+20)
In [28]: offsets.shape
Out[28]: (472, 2)
In [29]: arr.shape
Out[29]: (472,)
您可以随心所欲地操作这些数组,然后使用 x、y 和 C
hexbin 的计数参数再次绘制它们。如果您不更改偏移量和 arr 的值,这将绘制完全相同的图像:
In [30]: plt.hexbin(offsets[:, 0], offsets[:, 1], C=arr, gridsize=20)