MATLAB绘图转换

时间:2016-07-20 03:23:50

标签: matlab plot

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

以下是我所拥有的:强度值的二维数组,每行对应一个特定的phi,范围从0到360,步长为2;每列对应一个特定的θ,其范围为0到90,步长为2.这样就得到了2D强度数组,其维数为181乘46.

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

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

我创建了一个尺寸为181x46x3的三维数组,它存储计算出的x和y,以及每个theta和phi的强度值。但是我不能再使用pcolor绘制它们了,因为它们不再是统一的步骤,也不会以任何方式排序。

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据您的目的,您有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')

你得到:

enter image description here

现在您可以将x和y坐标设为:

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

第一个选项:分散

您可以直接将其绘制为

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

enter image description here

优点:

  • 精确坐标

缺点:

  • 不连续的情节,缩放时可见

第二个选项:Interpolate

您可以使用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')

enter image description here

优点:

  • 连续剧情

缺点:

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