3D表面上的二维等高线图

时间:2015-11-13 09:00:09

标签: matlab plot

我有2D的等高线图,我想放在一个圆柱体上。这意味着我的2D绘图的一个方向是轴向(z),另一个是方位角方向(phi)(辐射)。对于Radius,我想使用0.5的值。

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

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

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

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

(63是最后一个条目!)

比我绘制轮廓:

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

给了我以下内容: enter image description here

但是我不想将图片放在平面上我希望将它作为圆柱体的外表面!

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

为此,您必须从等高线图中提取高度/轮廓数据作为矩阵,然后将其作为texture map应用于您的圆柱体。

这可以按照以下方式完成

[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

答案 1 :(得分:0)

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使背景透明?