L. *_*son 4 python visualization matplotlib
有没有办法根据六边形的频率增加 pyplot.hexbin 中六边形的相对大小?我只能看到关键字参数的 binsize,它会影响十六进制的数量,但不会影响它们的大小。
但是在这篇文章中(大约 2/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()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |