给定 table 在 Matlab 中绘制 3d 图

Plotting a 3d figure in Matlab given a table

我的table是这样的: An image of the table

X↓ Y-> Y = 0 Y = 1 Y = 2 Y = 3
X = 3 PXY = 4/54 PXY = 3/54 PXY = 2/54 PXY = 1/54
X = 5 PXY = 6/54 PXY = 5/54 PXY = 4/54 PXY = 3/54
X = 7 PXY = 8/54 PXY = 7/54 PXY = 6/54 PXY = 5/54

PXY 由 (x - y + 1)/54

给出

我应该如何在 MATLAB 上绘制此图形?我想画一个 3d 直方图,像这样:

.

我的大部分尝试都以错误告终,通常是因为 X 和 Y 向量的长度不同。

如果也有办法做到这一点 Python,请告诉我,这也行。

在 Matlab 中,您可以使用 histogram2 指定 bin 在 x 和 y 方向上的边缘以及 bin 计数。

% Your data
x = [3; 5; 7];
y = [0, 1, 2, 3];
p = (x - y + 1)/54;
% since x is a column vector and y a row vector, as of Matlab R2016b this results in a length(x)*length(y) matrix, equivalent to:
% p = zeros(length(x), length(y));
% for ix = 1:length(x)
%    for iy = 1:length(y)
%        p(ix, iy) = (x(ix) - y(iy) + 1)/54;
%    end
% end

% Plot the histogram
histogram2('XBinEdges', [x; 9], ...
           'YBinEdges', [y, 4], ...
           'BinCounts', p);
xlabel('X')
ylabel('Y')
zlabel('P_{xy}')

由于 x 需要 3 个 bin(y 需要 4 个 bin),因此您需要提供 4 个边(y 有 5 个边),因此 histogram2 调用中需要额外的点。

编辑:再三考虑,您可能希望容器以您提供的 x 和 y 点为中心,因此您可能希望使用 xEdges = [x - 1; x(end) + 1]yEdges = [y - 0.5, y(end) + 0.5] 作为容器边缘。