【问题标题】:2D contour plot on 3D surface3D 表面上的 2D 等高线图
【发布时间】:2015-11-13 09:00:09
【问题描述】:

我有一个二维等高线图,我想把它放在一个圆柱体上。这意味着我的二维图的一个方向是轴向(z),另一个是方位角方向(phi)(以辐射为单位)。对于半径,我想使用 0.5 的值。

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

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

我首先将其转换为二维数组:

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

(63 是最后一个条目!)

比我绘制轮廓:

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

这给了我以下信息:

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

非常感谢任何帮助!

【问题讨论】:

标签: matlab plot


【解决方案1】:

为此,您必须从等高线图中提取高度/等高线数据作为矩阵,然后将其作为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

【讨论】:

    【解决方案2】:

    谢谢@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让背景透明?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2015-10-17
      • 2011-11-29
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多