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

Zp = [];

for i = 1:n

[xp,yp,zp] =

Vertices(x(i),y(i),z(i));

Xp = [Xp;xp];

Yp = [Yp;yp];

Zp = [Zp;zp];

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)

% 由长方体底面中心坐标求顶点坐标

xp = [x-hx x-hx x+hx x+hx

x-hx

x-hx x-hx x+hx x+hx x-hx

x-hx x-hx x+hx x+hx x-hx

x-hx x-hx x+hx x+hx x-hx

x  x  x

x  x

NaN  NaN

NaN  NaN

NaN];

yp = [y-hy y+hy y+hy y-hy

y-hy

y-hy y+hy y+hy y-hy y-hy

y-hy y+hy y+hy y-hy y-hy

y-hy y+hy y+hy y-hy y-hy

y  y  y

y  y

NaN  NaN

NaN  NaN

NaN];

zp =

[repmat(linspace(0,z,4)',[1,5]);z z z z z;NaN NaN NaN NaN NaN];

end

end

matlab rgb三维直方图,MATLAB小技巧之十:利用MATLAB绘制三维彩色柱状图[转载]相关推荐

  1. matlab矩阵画柱状三维,[原创]利用MATLAB绘制三维彩色柱状图

    function scatterbar(x,y,z,scale) %   根据散点数据绘制3维彩色柱状图 %   scatterbar(x,y,z,scale)  x,y,z是实值数组,用来指定柱子顶 ...

  2. 什么是拖延症 ----- 时间管理:终结拖延症小技巧之高效利用时间

    转载 http://blog.sina.com.cn/s/blog_4c34ea7b0101ebdj.html?tj=1 http://blog.sina.com.cn/s/blog_4c34ea7b ...

  3. MATLAB中的一些小技巧 - [MATLAB]

    http://liuxqsmile.blogbus.com/logs/17451138.html MATLAB中的一些小技巧 1. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算 ...

  4. 【Matlab编程实现常见小问题之二】Matlab如何实现QR二维码的生成与识别

    本篇文章中,旨在解决如何用Matlab编程实现QR二维码的生成与识别.编程环境是Matlab2012a,所用的开源库是ZXing,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目 ...

  5. VB.net小技巧——VB中利用TreeView控件和Box控件做知识备忘

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 VB.net小技巧--VB中利用TreeView控件和Box控件做知识备忘 这里不涉及代码的展示,主要是为了阐述一种做笔记的思想. 为 ...

  6. Matlab中的一些小技巧

    转自:http://blog.chinaunix.net/uid-20551209-id-3202608.html 1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长 ...

  7. 【小技巧】Linux安装matlab教程

    ## 下载 1. 下载MATLAB R20XXa for Linux full crack文件 ## 安装 2. 进入下载后的文件夹(假如下载后的文件放在了/home/deeppf中,其中deeppf ...

  8. matlab求解参数线性规划问题,实验三十用MATLAB求解线性规划问题

    <实验三十用MATLAB求解线性规划问题>由会员分享,可在线阅读,更多相关<实验三十用MATLAB求解线性规划问题(27页珍藏版)>请在人人文库网上搜索. 1.实验三十 用MA ...

  9. Linux之头文件引用小技巧(二十九)

    Linux之头文件引用小技巧 0.需求: 将本地头文件引用,#include "test.h"更换为#include <test.h>系统引用方式.1.目录结构如下├─ ...

最新文章

  1. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  2. python内置函数(2)-递归与迭代
  3. LeetCode Valid Number(判断字符串是否是合法的数字表示 )
  4. 学python需要记笔记吗_自学python需要做什么笔记
  5. 12、OpenCV Python 图像梯度
  6. FreeBSD 10 将使用 Clang 编译器替换 GCC
  7. mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)
  8. 新年快乐!我爱计算机视觉干货集锦与新年展望
  9. Android sdk 搭建
  10. 软件测试简历常见问题
  11. 视频通信系统的关键技术与挑战
  12. 计算机专业我的生涯规划档案,大学生学业生涯规划登记表11.doc
  13. 数据的更新(update的用法)笔记
  14. DevExpress的双击获取单元格数据
  15. RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
  16. java 8 joda time,Joda Time 使用
  17. Scratch模拟题(二级)_1
  18. 前端工程化——脚手架及自动化构建
  19. 远程工具之一---rsync用法介绍
  20. 桌面壁纸被计算机管理员禁用,电脑壁纸被管理员设置禁用了,怎么处理啊?

热门文章

  1. 数独问题每行每列每3X3
  2. python怎么启动mne_mne-python 安装大法
  3. 图像处理:图像清晰度评价
  4. c语言位运算负数的实例_负数位运算的右移操作-C语言基础
  5. Hides for Mac v5.6一键隐藏所有应用 支持 M1
  6. SAP BAPI BAPI_GOODSMVT_CREATE Goods movement
  7. dva 配置antd
  8. 《设计模式》之策略模式
  9. 处理txt文件下载下来以后,排版格式不对的问题
  10. 《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》论文笔记