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:

代码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 = [];

联系合同范文客服:xxxxx#qq.com(#替换为@)