我有一组远场强度数据(用于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绘制它们了,因为它们不再是统一的步骤,也不会以任何方式排序。
关于如何绘制它们的任何想法?
提前致谢。
答案 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')
你得到:
现在您可以将x和y坐标设为:
x=(th./90).*cosd(phi);
y=(th./90).*sind(phi);
第一个选项:分散
您可以直接将其绘制为
scatter(x(:),y(:),30,c(:),'fill')
优点:
缺点:
第二个选项: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')
优点:
缺点: