您的位置:首页 > 编程语言 > MATLAB

matlab在3维空间非x-y平面绘制直方图

2012-09-29 16:51 519 查看
  最近由于同学需要,要帮忙绘制一张matlab的三维空间的图,带有数据的二维分布。在网上找了很久,也没有找到matlab中关于在非x-y平面绘制直方图的函数,估计是mathworks公司觉得写这个函数没有必要。(也许是鄙人搜索学习能力有限,没有找到)
  木有办法,自己动手,丰衣足食。自己想办法画吧。

  绘制直方图原理上也很简单,只是在非二维空间上画要选择合适的函数,fill3函数正符合我们的要求。

fill3(X,Y,Z,C) fills the 3-D polygon defined by vectors X, Y and Z
with the color specified by C. The vertices of the polygon
are specified by triples of components of X, Y and Z. If necessary,
the polygon is closed by connecting the last vertex to the first.

   X,Y,Z的维度相同,假设为m*n维矩阵,则每一行分布代表m个点的x,y,z三个方向的坐标,这些点绘制成一个多边形。每行绘制一个多边形,共绘制出n个多边形。

 利用这个函数在空间上填充出一个矩形块,就实现了绘制直方图的基础。

  先尝试在3维空间的对应平面绘制出矩形,然后再考虑将拿到的直方图数据绘制到对应的平面上。这里给出在yz平面和xz平面绘制的函数(xy平面使用hist就能实现,因此不再重复了)。主要考虑是如何和hist函数对接使用,即调用的参数中,N和X的意义和hist函数中的一样,这样通过调用hist函数,将函数结果N以及参数X作为hist3函数的参数即可绘制。这里的代码还没有特别完善,直方图的X必须是等步长变化,因为直方图的bar的宽度统一取的是第一段的长度(要和X步长完全一致也很容易,以及自定义颜色等,可以自行考虑修改)。

test code

%test hist3
x = -4:0.1:4;%直方图X方向间隔坐标
y = randn(10000,1);%待统计数据
YBound=0;%YZ平面上绘制时X轴方向的偏移
subplot(2,1,1);
view(135,30);
hold on;
N=hist(y,x);
hist_diy(N,x,1,YBound);%xz方向
hist_diy(N,x,2,YBound);
hxlabel=xlabel('X');
hylabel=ylabel('Y');
hzlabel=zlabel('Z');
set(hxlabel,'FontSize',16,'FontName','Times New Roman');
set(hylabel,'FontSize',16,'FontName','Times New Roman');
set(hzlabel,'FontSize',16,'FontName','Times New Roman');
grid;
hold off;
subplot(2,1,2);
hist(y,x);
hxlabel=xlabel('X');
hylabel=ylabel('Y');
set(hxlabel,'FontSize',16,'FontName','Times New Roman');
set(hylabel,'FontSize',16,'FontName','Times New Roman');
grid;


测试结果图:



再上一张用这个函数绘制的图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: