Python:从 numpy 矩阵创建二维直方图

新手上路,请多包涵

我是蟒蛇的新手。

我有一个 numpy 矩阵,尺寸为 42x42,值在 0-996 范围内。我想使用这些数据创建一个 2D 直方图。我一直在看教程,但它们似乎都展示了如何从随机数据而不是 numpy 矩阵创建二维直方图。

到目前为止,我已经导入了:

 import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

我不确定这些是否是正确的导入,我只是想从我看到的教程中获取我能学到的东西。

我有 numpy 矩阵 M 其中包含所有值(如上所述)。最后,我希望它看起来像这样:

二维直方图

显然,我的数据会有所不同,所以我的情节应该看起来不同。谁能帮帮我?

编辑: 出于我的目的,下面使用 matshow 的 Hooked 示例正是我要寻找的。

原文由 Kestrel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 555
2 个回答

如果您有来自计数的原始数据,您可以使用 plt.hexbin 为您创建绘图(恕我直言,这比方格更好):改编自 hexbin 的示例:

 import numpy as np
import matplotlib.pyplot as plt

n = 100000
x = np.random.standard_normal(n)
y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n)
plt.hexbin(x,y)

plt.show()

在此处输入图像描述

如果您提到的矩阵中已经有 Z 值,只需使用 plt.imshowplt.matshow

 XB = np.linspace(-1,1,20)
YB = np.linspace(-1,1,20)
X,Y = np.meshgrid(XB,YB)
Z = np.exp(-(X**2+Y**2))
plt.imshow(Z,interpolation='none')

在此处输入图像描述

原文由 Hooked 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不仅有 2D 直方图矩阵,还有底层 (x, y) 数据,那么您可以制作 (x, y) 点的散点图,并根据每个点的分箱计数值为每个点着色二维直方图矩阵:

 import numpy as np
import matplotlib.pyplot as plt

n = 10000
x = np.random.standard_normal(n)
y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n)
xedges, yedges = np.linspace(-4, 4, 42), np.linspace(-25, 25, 42)
hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges))
xidx = np.clip(np.digitize(x, xedges), 0, hist.shape[0]-1)
yidx = np.clip(np.digitize(y, yedges), 0, hist.shape[1]-1)
c = hist[xidx, yidx]
plt.scatter(x, y, c=c)

plt.show()


二维直方图的示例散点图

原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏