现在我有x、y两组数据,它们都有20个数值且一一对应,相当于一个(x,y)坐标,我想构建一个3D直方图,xOy平面是一个方格图,x从-10到15,y从-15到15,每个方格中心有一个条形纵坐标,其大小是每个方格中的点的数量在总点数中的占比,请给我完整的代码
时间: 2024-09-27 07:16:37 浏览: 58
python 求某条线上特定x值或y值的点坐标方法
在Python中,你可以使用matplotlib库的`hist3d`函数来构建这种3D直方图。首先确保已经安装了matplotlib和numpy库。下面是实现这个需求的完整代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 假设x和y是你的数据
x = np.linspace(-10, 15, 20) # 生成20个均匀分布的x值
y = np.linspace(-15, 15, 20) # 同理生成20个y值
X, Y = np.meshgrid(x, y)
# 将x和y组合成三维数组,模拟实际坐标
coordinates = np.column_stack((X.ravel(), Y.ravel()))
# 假设data是你的20x20对应的数据矩阵
data = np.random.randn(400).reshape(20, 20) # 示例数据,替换为你实际的数据
# 计算每个方格内的点数量,并归一化为占比
counts, _, _ = np.histogram2d(data[:, 0], data[:, 1], bins=(x, y))
normalized_counts = counts / counts.sum()
# 构建3D直方图
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.bar3d(X.ravel(), Y.ravel(), np.zeros_like(normalized_counts), dx=1, dy=1, dz=normalized_counts, zsort='average')
# 设置轴标签和标题
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Percentage of Points')
ax.set_title('3D Histogram with Point Counts')
plt.show()
```
这段代码首先创建了一个二维网格,然后通过`histogram2d`函数计算每个方格内点的数量并归一化为占比。最后,使用`bar3d`函数画出3D直方图。
阅读全文