【问题标题】:Creating meshgrid of scattered Cartesian data for plotting on a sphere创建分散笛卡尔数据的网格网格以在球体上绘图
【发布时间】:2020-08-11 08:36:35
【问题描述】:

我有一组 n=8000 笛卡尔坐标 X、Y 和 Z 作为向量,还有一个相同大小的向量 V,我想将其用作在球体上创建热图的值。

我看到了这个链接 (visualization of scattered data over a sphere surface MATLAB),但我不明白如何将这组数据转换为网格网格以使用 surf 进行绘图。

我看到的几乎每个示例都使用网格网格。 现在,我正在绘制一个球体,然后使用 scatter3 将我的点绘制为大球,然后尝试平滑它们。我看起来像这样:

我想将该图作为该链接中示例的绘图,他在其中使用:

k = 5;
n = 2^k-1;
[x,y,z] = sphere(n);
c = hadamard(2^k);
surf(x,y,z,c);
colormap([1  1  0; 0  1  1])
axis equal

编辑:

(抱歉这么久才回复,电晕危机远离工作) 我实际上在做的是:

for i=1:numel(pop0n)
ori(i,:)=ori(i,:)/norm(ori(i,:));
end

x = ori(:,1); 
y = ori(:,2); 
z = ori(:,3); 

%// plot
m=100;
[aa,bb,cc] = sphere(m);
surf(aa,bb,cc,ones(m+1,m+1)*min(pop0n))
hold on
colormap jet;
scatter3(x,y,z,400,pop0n/norm(pop0n),'filled');
colorbar
shading interp

数组 'ori' 是 8000x3,包含我要绘制的点的 x、y 和 z 坐标,pop0n 是一个 8000 大小的向量,其中包含每个坐标的强度。

我的主要问题是如何将作为向量的 x、y、z 和 pop0n 转换为 2D 数组 (meshgrid) 以使用 surf? 因为如果它们是向量,我不能简单地做 surf(x,y,z,pop0n)。

提前致谢

【问题讨论】:

  • 不清楚您的问题与您链接的问题有何不同。你试过griddata吗?
  • 我们应该假设您拥有的 x,y,z 是球体上的点?
  • 不要使用scatter3。使用surf 并将您的向量V 作为第四个参数发送(如您链接的示例中所示)。
  • Hoki:这就是我想做的,但不知道如何做... David:不同之处在于变量的形状以及如何从一个转换到另一个。我不熟悉网格数据。我会查一下。谢谢
  • 是的,x,y,z 是球体上的点

标签: matlab plot


【解决方案1】:

正如 David 建议的那样,griddata 完成了这项工作。

我所做的是:

for i=1:numel(pop0n)
ori(i,:)=ori(i,:)/norm(ori(i,:));
end

x = ori(:,1); 
y = ori(:,2); 
z = ori(:,3); 

%// plot
m=100;
[aa,bb,cc] = sphere(m);
v = griddata(x,y,z,pop0n,aa,bb,cc,'nearest');
surf(aa,bb,cc,v)
colormap jet;
colorbar
shading interp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2023-03-04
    • 2018-04-19
    • 2023-01-30
    • 2022-12-19
    • 2023-03-14
    相关资源
    最近更新 更多