You need to enable JavaScript to run this app. 如何基于给定联合概率表在MATLAB或Python中绘制3D直方图
优惠活动
大模型
产品
解决方案
定价
更多

如何基于给定联合概率表在MATLAB或Python中绘制3D直方图

报错原因说明

你遇到的X/Y向量长度不一致报错,核心是3D直方图绘图函数需要的输入维度和你传入的一维取值向量不匹配,需要先构造对应维度的网格坐标以及和网格对齐的概率矩阵,两种语言的实现方案如下:


MATLAB实现方案
% 定义X、Y的取值范围
x_val = [3,5,7];
y_val = [0,1,2,3];
% 生成二维网格,保证维度和概率矩阵匹配
[X_grid, Y_grid] = meshgrid(y_val, x_val);
% 按公式计算联合概率矩阵,维度为3行4列,和你给出的数值完全对应
P_XY = (X_grid - Y_grid + 1)/54;

% 绘制3D直方图
bar3(P_XY, 0.8); % 第二个参数调整柱子宽度,可自行修改
% 配置坐标轴标签
set(gca,'XTickLabel', y_val);
set(gca,'YTickLabel', x_val);
xlabel('Y取值');
ylabel('X取值');
zlabel('联合概率P_{XY}');
title('联合概率分布3D直方图');

Python实现方案

依赖numpy和matplotlib库,直接运行即可:

import numpy as np
import matplotlib.pyplot as plt

# 定义X、Y的取值范围
x_val = np.array([3,5,7])
y_val = np.array([0,1,2,3])
# 生成二维网格
X_grid, Y_grid = np.meshgrid(y_val, x_val)
# 计算联合概率矩阵
P_XY = (X_grid - Y_grid + 1)/54

# 初始化3D画布
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(projection='3d')
# 构造bar3d需要的输入参数
dx = dy = 0.8 # 柱子的长宽,可自行调整
x_pos = X_grid.flatten()
y_pos = Y_grid.flatten()
z_pos = np.zeros_like(x_pos)
dz = P_XY.flatten()
# 绘制3D柱状图
ax.bar3d(x_pos, y_pos, z_pos, dx, dy, dz)

# 配置坐标轴
ax.set_xlabel('Y取值')
ax.set_ylabel('X取值')
ax.set_zlabel('联合概率$P_{XY}$')
ax.set_xticks(y_val)
ax.set_yticks(x_val)
plt.title('联合概率分布3D直方图')
plt.show()

内容的提问来源于stack exchange,提问作者WiseRohin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 23:36:07