MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 896|回复: 1|关注: 0

[已答复] 如何用MATLAB画粒子空间分布图,并以颜色的深浅表示浓度?

[复制链接]

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
  • 关注者: 1
发表于 2017-9-5 16:39:35 | 显示全部楼层 |阅读模式
问题描述:
现有一组室内飞沫污染物的空间分布数据,由于飞沫个数很多,为了更加清晰准确的表示飞沫个数浓度(个/m³)的空间分布,将房间按0.4m×0.4m×0.4m划分成多个小立方体,并将这个小立方体内的飞沫的个数浓度叠加到小立方体的中心点上,以中心点的浓度代表这个小立方体的浓度,并以颜色深浅来表示飞沫个数浓度的大小。
希望得到的飞沫个数浓度分布图如下图一(图中*为病人嘴部的位置,*为嘴部投影到地面的位置,+为陪护和医护嘴部的位置,+为陪护和医护嘴部投影到地面的位置)(该图没有以颜色深浅来表示飞沫个数浓度的大小,我希望能以颜色来表示,这样会更清晰)
现有一个M文件,内容如下:
filename='3-15s-all-DPM.xlsx';
[NUM,TXT,RAW]=xlsread(filename,4);
x=NUM(:,1);
y=NUM(:,2)-3;
z=NUM(:,3);
c=NUM(:,4);
num=size(x,1);%数据个数


l=0.2;%正方体边长
ll=1/l;
x_max=3.5;%长
y_max=3;%高
z_max=8.5;%宽




xi=0:l:x_max;
yi=0:l:y_max;
zi=0:l:z_max;


sizex=size(xi,2);
sizey=size(yi,2);
sizez=size(zi,2);


Csum=zeros(sizex,sizey,sizez);


for i=1:num
    x_pos=floor(x(i)/l)+1;
    y_pos=floor(y(i)/l)+1;
    z_pos=floor(z(i)/l)+1;
    Csum(x_pos,y_pos,z_pos)=Csum(x_pos,y_pos,z_pos)+c(i);
end


result_len=sizex*sizey*sizez;
disp(['total:',num2str(result_len)]);
result_x=zeros(result_len,1);
result_y=zeros(result_len,1);
result_z=zeros(result_len,1);
result_c=zeros(result_len,1);


idx=1;
for i=1:sizex
    for j=1:sizey
        for k=1:sizez
            if(Csum(i,j,k)>0)
                result_x(idx)=i;
                result_y(idx)=j;
                result_z(idx)=k;
                result_c(idx)=Csum(i,j,k);
                idx=idx+1;
            end
        end
    end
   
end


result_len=idx-1;




plot_c=result_c(1:result_len);




plot_x=result_x(1:result_len)*l-l/2;
plot_y=result_y(1:result_len)*l-l/2;
plot_z=result_z(1:result_len)*l-l/2;




figure,
scatter3(plot_z,plot_x,plot_y,15,plot_c);
xlabel('房间的长');
ylabel('房间的宽');
zlabel('房间的高');




%scatter3(plot_x,plot_y,plot_z,15,plot_c);


%scatter3(plot_x,plot_y,plot_z,plot_c);
% %
% figure,
% i=1;
% plot3(plot_x(i),plot_y(i),plot_z(i),'ko','MarkerSize',result_c_log(i)*4,'MarkerEdgeColor','r');
% hold on;
% for i=2:result_len
%     plot3(plot_x(i),plot_y(i),plot_z(i),'ko','MarkerSize',result_c_log(i)*4,'MarkerEdgeColor','r');
% end

(filename见附件)

根据以上程序得到的图如图二所示:
图二与图一的差别较大,想要得到图一,应该怎么操作?


另外,对比现有的M文件程序,我想要的效果主要有两点不同:
1、由附件filename中可以看出,浓度单位是kg/m³(这个浓度是模拟软件模拟得到的,不需要自己计算),如果想要的是个数浓度(个/m³),应该如何修改程序?(注:附件中,每一行表示一个飞沫污染物,前三列是空间坐标数据X、Y、Z,计算个数浓度可能就要自己编程计算了
2、该如何用颜色表示个数浓度的大小?


最后,附件中有四张sheet,每一张代表飞沫污染物的一种粒径,结果要求的是,每一张sheet(即每一种粒径)对应一张个数浓度空间分布图,并以颜色表示浓度大小


由于之前没有接触过MATLAB,导师突然给这个任务,我也摸不着头脑,希望能得到帮助,谢谢!







图一

图一

图二

图二

3-15s-all-DPM.xlsx

509.46 KB, 下载次数: 0

filename

新手

9 麦片

财富积分


050


0

主题

10

帖子

1

最佳答案
  • 关注者: 1
发表于 2017-10-13 19:43:27 | 显示全部楼层
MATLAB初学者必读
这种粒子具体的重量与个数有还算的方式吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表