微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

同一图上的多个二维直方图

如何解决同一图上的多个二维直方图

我有这个脚本来从图像和 roi 中提取数据。除了输出图形的最后之外,我的所有工作都完美无缺。基本上我在两个直方图的窗口化方面都遇到了问题。如果我更改网格大小、最小计数、图形大小或 x 和 y 限制,其中一个直方图将始终略微拉伸,这无关紧要。当我单独绘制它们时,它们不会被拉伸。有没有办法使同一个图上的六边形成为一致的“非拉伸”形状? 下面是我的图表和绘图方法。 (我省略了我的数据提取方法,因为它非常专业)。

plt.ion()
plt.figure(figsize=(16,8))
plt.title('2D Histogram of Entorhinal Cortex ROIs')
plt.xlabel(x_inputs) 
plt.ylabel(y_inputs)
colors = ['Reds','Blues']
x = []
y= []
#image extraction code
hist1 = plt.hexbin(x[0],y[0],gridsize=100,cmap='Reds',mincnt=10,alpha=0.35)
hist2 = plt.hexbin(x[1],y[1],cmap='Blues',alpha=0.35)
plt.colorbar(hist1,orientation="vertical")
plt.colorbar(hist2,orientation="vertical")
plt.ioff()
plt.show()

enter image description here

解决方法

可以通过使用 extent 参数为 bin 设置限制来解决此问题。这可以通过计算所有绘制数据的最小和最大 x 和 y 值来自动完成。在 gridsize 较小的情况下(例如 10),此方法可能会导致某些 bin 部分超出绘图限制。如果是这样,使用 plt.margins 设置边距有助于显示图中的所有 bin。

import numpy as np               # v 1.20.2
import matplotlib.pyplot as plt  # v 3.3.4

# Create a random dataset
rng = np.random.default_rng(seed=123) # random number generator
size = 10000
x1 = rng.normal(loc=5,scale=10,size=size)
y1 = rng.normal(loc=5,scale=2,size=size)
x2 = rng.normal(loc=-30,scale=5,size=size)
y2 = rng.normal(loc=-20,size=size)

# Define hexbin grid extent
xmin = min(*x1,*x2)
xmax = max(*x1,*x2)
ymin = min(*y1,*y2)
ymax = max(*y1,*y2)
ext = (xmin,xmax,ymin,ymax)

# Draw figure with colorbars
plt.figure(figsize=(10,6))
hist1 = plt.hexbin(x1,y1,gridsize=30,cmap='Reds',mincnt=10,alpha=0.3,extent=ext)
hist2 = plt.hexbin(x2,y2,cmap='Blues',extent=ext)
plt.colorbar(hist1,orientation='vertical')
plt.colorbar(hist2,orientation='vertical')
# plt.margins(0.1) # Uncomment this if hex bins are partially outside of plot limits

plt.show()

hexbin

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。