MATLAB小技巧之十:利用MATLAB绘制三维彩色柱状图[转载]

标签:
matlab |
分类: matlab |
MATLAB自带有绘制三维柱状图的函数bar3,有版友反映不好控制柱子的颜色,特别是bar3不能绘制渐变色的柱子,并且bar3不能根据用户指定的散点数据绘制柱状图。为此,我编写了一个函数(scatterbar),用来绘制带渐变色的三维彩色柱状图。下面给出示例。
【例】根据散点数据绘制三维彩色柱状图
代码1:
[x,y] = meshgrid(-6:6,-3:0.5:3);
z = mvnpdf([x(:),y(:)],[0,0],[4,0;0,1]);
scatterbar(x,y,z)
效果图1:
http://attach.matlabsky.com/data/attachment/forum/201111/03/154251pyh5ux5csupxhhxu.jpg.thumb.jpg
代码2:
x = 0:0.1:2*pi;
y = sin(x);
scatterbar(x,y,y,100);
效果图2:
http://attach.matlabsky.com/data/attachment/forum/201111/03/154254umssno30csu4n0u0.jpg.thumb.jpg
代码3:
t = 0:0.1:2*pi;
x = cos(t);
y = sin(t);
z = abs(y);
scatterbar(x,y,z,100);
效果图3:
http://attach.matlabsky.com/data/attachment/forum/201111/03/1542566kp2b67om42sc48t.jpg.thumb.jpg
scatterbar函数源代码:
function scatterbar(x,y,z,scale)
%
%
%
%
%
%
%
%
%
%
%
%
% 输入参数类型判断
if nargin < 3
end
if ~isreal(x) || ~isreal(y) || ~isreal(z)
end
% 提取x,y,z等长部分的元素
x = x(:);
y = y(:);
z = z(:);
n = min([numel(x) numel(y) numel(z)]);
x = x(1:n);
y = y(1:n);
z = z(1:n);
% 计算极差和差分值
rx = range(x);
ry = range(y);
dx = abs(diff(x));
dx = min(dx(dx>0));
dy = abs(diff(y));
dy = min(dy(dy>0));
% 自动计算柱子的粗细
if nargin == 3
end
% 根据用户输入参数scale计算柱子的粗细
if nargin == 4
end
% 通过循环绘制三维彩色柱状图
figure
hold on
Xp = [];
Yp = [];
Zp = [];
for i = 1:n
end
%通过surf函数生成彩色的立方体盒子
h = surf(Xp,Yp,Zp,Zp,'FaceColor','interp');
%set(h,'FaceAlpha',0.25);
grid on
view(3)
hold off
%--------------------------------------------------
% 求柱子顶点的子函数
%--------------------------------------------------
function [xp,yp,zp] = Vertices(x,y,z)
end
end