发布时间 : 星期四 文章matlab 小技巧 - 图文更新完毕开始阅读
【例】根据散点数据绘制三维彩色柱状图 代码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:
代码2:
x = 0:0.1:2*pi; y = sin(x);
scatterbar(x,y,y,100); 效果图2:
代码3:
t = 0:0.1:2*pi; x = cos(t); y = sin(t); z = abs(y);
scatterbar(x,y,z,100); 效果图3:
scatterbar函数源代码:
function scatterbar(x,y,z,scale) % 根据散点数据绘制3维彩色柱状图
% scatterbar(x,y,z,scale) x,y,z是实值数组,用来指定柱子顶面中心点三维坐标。 % scale是大于0的标量,用来指定柱子的粗细,scale越大,柱子越细,默 % 认情况下根据坐标点自动计算柱子的粗细。 %
% CopyRight:xiezhh(谢中华) % 2011.10.31 % Example:
% [x,y] = meshgrid(-6:6,-3:0.5:3); % z = mvnpdf([x(:),y(:)],[0,0],[4,0;0,1]); % scatterbar(x,y,z) % scatterbar(x,y,z,50);
% 输入参数类型判断 if nargin < 3
error('至少需要三个输入参数'); end
if ~isreal(x) || ~isreal(y) || ~isreal(z) error('前三个输入应为实值数组'); 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 if ~isempty(dx) hx = dx/2; else
hx = 0.5; end
if ~isempty(dy) hy = dy/2; else
hy = 0.5; end end
% 根据用户输入参数scale计算柱子的粗细 if nargin == 4
if ~isreal(scale) || scale < 0 error('第四个输入应为正的标量'); end
if rx == 0 && ry == 0 rx = 0.5*scale; ry = rx;
elseif rx == 0 || ry == 0 rx = max(rx,ry); ry = rx; end
hx = rx/scale; hy = ry/scale; end
% 通过循环绘制三维彩色柱状图 figure hold on Xp = []; Yp = [];