有没有办法根据pyplot.hexbin的频率增加六边形的重复大小? 我只能看到关键字参数的binsize,它会影响hexes的数量,但不会影响它们的大小。
但是在this article(在“多变量六边形分档”标题下约2/3),它讨论了绘制尺寸与计数成比例的六边形,以便更清楚地观察趋势(参见该文章中的下图) )
我是否错过了允许此操作的关键字参数?
谢谢!
答案 0 :(得分:3)
对于所讨论的情节,使用六边形分箱没有任何优势,因为六边形具有不同的尺寸,因此在整个图中不允许一致的分箱。但是,您可以使用常量分箱,只收缩没有最大值的单元格。
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.path import Path
from matplotlib.patches import PathPatch
import numpy as np; np.random.seed(42)
a = np.random.rand(200,2)
b = np.random.rand(200)
c = np.concatenate((a,np.c_[b,b]), axis=0)
fig, ax = plt.subplots()
hexbin = ax.hexbin(c[:,0],c[:,1],gridsize=20, linewidth=0 )
def sized_hexbin(ax,hc):
offsets = hc.get_offsets()
orgpath = hc.get_paths()[0]
verts = orgpath.vertices
values = hc.get_array()
ma = values.max()
patches = []
for offset,val in zip(offsets,values):
v1 = verts*val/ma+offset
path = Path(v1, orgpath.codes)
patch = PathPatch(path)
patches.append(patch)
pc = PatchCollection(patches)
pc.set_array(values)
ax.add_collection(pc)
hc.remove()
sized_hexbin(ax,hexbin)
plt.show()
<小时/> 对于比较,可以通过散点图传输相同的信息。这段代码可能比上面的代码更直观。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)
a = np.random.rand(200,2)
b = np.random.rand(200)
c = np.concatenate((a,np.c_[b,b]), axis=0)
fig, ax = plt.subplots()
h, ex, ey = np.histogram2d(c[:,0],c[:,1], bins=np.linspace(0,1,20))
X,Y = np.meshgrid(ex[:-1]+np.diff(ex)/2.,ey[:-1]+np.diff(ey)/2.)
ax.scatter(X.flatten(),Y.flatten(),
c=h.T.flatten(), s=h.T.flatten()**2,
marker="h")
plt.show()