繁体   English   中英

3D表面上的2D等高线图

[英]2D contour plot on 3D surface

我有一个2D轮廓图,我想放在圆柱上。 这意味着我的2D图的一个方向是轴向(z),另一个方向是方位角(phi)(在辐射中)。 对于半径,我想使用0.5的值。

对于phi,z和要绘制的数据,我具有3D数据:

  • 第一维:z方向
  • 二维:phi方向
  • 第三维:r维度

我首先将其转换为2D数组:

YY(:,:)=phi(:,:,63);
ZZ(:,:)=z(:,:,63);
EE(:,:)=E2(:,:,63);

(63是最后一个条目!)

比起绘制轮廓:

contourf(YY,ZZ,EE,'LineColor','none');

这给了我以下内容: 在此处输入图片说明

但是我不想让图片平面化,我想将其作为圆柱体的外表面!

任何帮助是极大的赞赏!

为此,您必须从轮廓图中提取高度/轮廓数据作为矩阵,然后将其作为纹理贴图应用到圆柱体。

可以如下进行

[C, hc]=contourf(YY,ZZ,EE,'LineColor','none'); %Youll want a handle to your contour map.
zdat=hc.ZData; %extract data as matrix.
[Xc, Yc, Zc]=cylinder;
h=surf(Xc, Yc, Zc); %create cylinder
set(h, 'Cdata', zdat, 'Facecolor', 'TextureMap'); %set zdat as texturemap

Thx @nivag完美运行! 但是我决定先保存图,然后再加载,因为那样,图片的分辨率更好!

figure;
contourf(YY,ZZ,EE,'LineColor','none');

axis off
set(gca, 'units' ,'norm', 'position', [0 0 1 1])

print contour.tiff -dtiff -r100

file = imread('contour.tiff');

[Xc, Yc, Zc]=cylinder;
h=surf(Xc, Yc, Zc);

h = findobj('Type','surface'); 

pic = file;
set(hs,'CData', flipud(pic),'FaceColor','texturemap')
colorbar;
shading flat;
alpha(0.8);

view(25,20);
axis vis3d;
axis equal;
colormap default

看起来确实不错,但是我有一个问题,就是情节旁边的区域不透明! 有没有办法告诉Matlab使背景透明?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM