Matlab可视化四维数据(用颜色表示柱坐标上某点的数值大小)

Matlab新手,只是粗略看过一遍b站的教程。在使用Matlab的过程中,深感函数使用、编程思维等的困难。感觉还是要加强编程思维的训练比较好。

书归正传,这是我第一次运用Matlab绘制三维图。需要将一组四维数据可视化,其中前三维是xyz坐标,第四维是在该点上的数值大小,  用颜色来表示。曾在网络上查找了很久,都没找到合适的模板,最后自己动脑写了一个。

输入数据是:柱坐标下的(ia,ir,iz)上的数值A_xyz。在Matlab中需要:

1读入数据A_xyz;

2.将用网格划分的柱坐标换算成用网格划分的笛卡尔坐标;

3.可视化思维数据。

程序的中心是scatter3函数。

clear
clc;
%网格参数
g_z = 50;
g_a = 50;
g_r = 50;
dz = 0.01;
dr = 0.01;

%读取A_xyz
fid = fopen('*****0828.mco','r');
A = fscanf(fid,'%e',g_z*g_r*g_a);
A_xyz = log10(A);%为了视觉效果进行的处理
%划分网格
A_0 = linspace(pi/(g_a*2),pi/2,g_a);
R_0 = linspace(dr,dr*g_r,g_r);
Z0 = linspace(dz,dz*g_z,g_z);
%[X0,Y0]=pol2cart(A_0,R_0);
%极直转换,但因为所得参数的物理意义不同于pol2car这种,所以按照物理意义编辑
X=zeros(g_a ,g_r);
Y=zeros(g_a ,g_r);
%一个角度对应50个rho
for m =1:g_a
    for n = 1:g_r
        X(m,n) = R_0(1,n) * cos(A_0(1,m));
        Y(m,n) = R_0(1,n) * sin(A_0(1,m));
    end
end

J1=zeros(1,g_z*g_r*g_a);
J2=zeros(1,g_z*g_r*g_a);
J3=zeros(1,g_z*g_r*g_a);
%按输出顺序zra赋值,扩充J组成为1,grid_z*grid_r*grid_a
for i = 0:g_a - 1
    for j = 0:g_r - 1
        for k = 1:g_z
            J1(1,k+g_r*j+g_r*g_a*i) = X(i+1,j+1);%注意此时的赋值
            J2(1,k+g_r*j+g_r*g_a*i) = Y(i+1,j+1);
            J3(1,k+g_r*j+g_r*g_a*i) = Z0(1,k);%z轴的网格
        end   
    end
end

%画图,(x,y,z)坐标轴,不过下列文本无意义
scatter3(J1,J2,J3,40,A_xyz,'filled')
colorbar
xlabel('X(0.5*PI/na,PI/2;0.01,50)')
ylabel('Y(0.5*PI/na,PI/2;0.01,50)')
zlabel('Z(0.01,40)')
%创建旁边的色卡
cb = colorbar;              
cb.Label.String = 'Absorbtion in XYZ(a,r,z)';

最后出现的问题:本次实验的数值极值差过大,导致视觉效果很差。这种可视化方式的缺点很明显。希望能做成切片或者其他形式的图。

——————更新,21/8/30

之前的代码在网格划分时出错了。

我的数据是“a角变化一次,划分的rho变化g_r次”,因此在极直转换中不能直接用pol2cart。用循环赋值,其中的逻辑关系我想了一天多,,,我好菜。希望有这次经验后下次就能做得更好更快了。

从封面图来看,颜色几乎不随z坐标变化。也许是网格划分小而色差大的缘故?不然就是程序又出错了emmmm

——————更新,21/9/01

为了视觉效果更好,进行了一些数值处理

——————更新,22/06/10

  J1(1,k+(m-1)*g_x+(i-1)*g_y) = Z(1,k);%6
            J2(1,k+(m-1)*g_x+(i-1)*g_y) = X(1,m);%500
            J3(1,k+(m-1)*g_x+(i-1)*g_y) = Y(1,i);%6*500
            A0(1,k+(m-1)*g_x+(i-1)*g_y) = A(k,m,i);

用来处理大数据图像(图像拼接)时做的一些改进,虽然还是转python了

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值