给定 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]
作为容器边缘。
我的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]
作为容器边缘。