【问题标题】:MATLAB Plotting TransformationMATLAB 绘图转换
【发布时间】:2016-11-23 03:08:31
【问题描述】:

我有一组远场强度数据(用于 LED / 光子学应用),我正在尝试通过极坐标变换来绘制它们。

以下是我所拥有的:强度值的二维数组,每一行对应一个特定的 phi,范围从 0 到 360,步长为 2;每列对应一个特定的 theta,其范围从 0 到 90,步长为 2。这导致二维强度阵列的尺寸为 181 x 46。

如果我使用 linspace 手动生成 phi 和 theta 值,我可以将它们绘制成 x 值为 theta,y 值为 phi,强度将由其颜色表示,我已经成功完成了在 MATLAB 中使用 pcolor 非常简单

然而,为了生成极地远场强度图,x 轴需要是 theta/90*cos(phi),y 轴需要是 theta/90*sin(phi),其中再次代表强度的颜色。

我创建了一个 3 维数组,大小为 181x46x3,用于存储计算得到的 x 和 y,以及每个 theta 和 phi 的强度值。但是,我无法再使用 pcolor 绘制它们,因为它们不再是统一的步骤,也没有按任何方式排序。

关于如何绘制它们的任何想法?

提前致谢。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    根据您想要做什么,您有 2 个选项,您可以分散您的点,也可以将它们插入到网格中。例如:

    c=peaks(181);
    c=c(1:181,1:46);
    [th,phi]=meshgrid(0:2:90,0:2:360);
    

    创建一个与您提到的形状相似的示例数据

    使用pcolor作为

    h=pcolor(th,phi,c);
    set(h,'edgecolor','none')
    

    你得到:

    现在你可以得到 x 和 y 坐标:

    x=(th./90).*cosd(phi);
    y=(th./90).*sind(phi);
    

    第一个选项:分散

    您可以直接将其绘制为

    scatter(x(:),y(:),30,c(:),'fill')
    

    优点:

    • 精确坐标

    缺点:

    • 不连续的绘图,缩放时可见

    第二个选项:插值

    您可以使用griddata 将这些坐标插入到正方形网格中,以便使用 pcolor 进行绘制

    [xv,yv]=meshgrid(-1:0.01:1);
    cv=griddata(x,y,c,xv,yv);
    
    h=pcolor(xv,yv,cv);
    set(h,'edgecolor','none')
    

    优点:

    • 连续情节

    缺点:

    • 不是精确的值,特别是靠近点彼此非常接近的中心

    【讨论】:

    • 第二种方法效果很好,非常感谢您的帮助!!
    • @Henry 很高兴我能帮上忙,请将您的问题标记为已回答,以便关闭
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2014-02-20
    • 2013-01-14
    相关资源
    最近更新 更多