在Matlab中绘制光盘,颜色随角度变化

时间:2012-02-03 10:29:54

标签: matlab plot

我想根据测量角度来表示一些数据。我有类似的东西:

angle=[0 90 180 270 360];
value=[1 2 3 4];

就我而言,length(angle)=73

如何根据矢量值绘制半径线颜色不同的光盘。

我想要像imagesc这样的东西,但是在光盘中。

我尝试使用玫瑰未成功,但最多只能使用20个角度。

2 个答案:

答案 0 :(得分:3)

这是另一种不使用3D图形的选择,只有2D。它使用绘制三角形的原始patch命令。结果如下:

enter image description here

function PlotDisc
    thetas=(0:5:360)'*pi/180;
%     r=(0:0.1:1)';
    r = 1;
    [x,y]=pol2cart(thetas,r);
    colMap = GetColMap();
    for i=1:numel(x)-1
        X = [0 x(i) x(i+1) 0];
        Y = [0 y(i) y(i+1) 0];
        col = i / (numel(x)-1) * numel(colMap);
        patch(X,Y,col,'EdgeAlpha',0);
    end
    axis equal
end

function colMap = GetColMap()
   colMap = ...
   [0.0417         0         0
    0.0833         0         0
    0.1250         0         0
    0.1667         0         0
    0.2083         0         0
    0.2500         0         0
    0.2917         0         0
    0.3333         0         0
    0.3750         0         0
    0.4167         0         0
    0.4583         0         0
    0.5000         0         0
    0.5417         0         0
    0.5833         0         0
    0.6250         0         0
    0.6667         0         0
    0.7083         0         0
    0.7500         0         0
    0.7917         0         0
    0.8333         0         0
    0.8750         0         0
    0.9167         0         0
    0.9583         0         0
    1.0000         0         0
    1.0000    0.0417         0
    1.0000    0.0833         0
    1.0000    0.1250         0
    1.0000    0.1667         0
    1.0000    0.2083         0
    1.0000    0.2500         0
    1.0000    0.2917         0
    1.0000    0.3333         0
    1.0000    0.3750         0
    1.0000    0.4167         0
    1.0000    0.4583         0
    1.0000    0.5000         0
    1.0000    0.5417         0
    1.0000    0.5833         0
    1.0000    0.6250         0
    1.0000    0.6667         0
    1.0000    0.7083         0
    1.0000    0.7500         0
    1.0000    0.7917         0
    1.0000    0.8333         0
    1.0000    0.8750         0
    1.0000    0.9167         0
    1.0000    0.9583         0
    1.0000    1.0000         0
    1.0000    1.0000    0.0625
    1.0000    1.0000    0.1250
    1.0000    1.0000    0.1875
    1.0000    1.0000    0.2500
    1.0000    1.0000    0.3125
    1.0000    1.0000    0.3750
    1.0000    1.0000    0.4375
    1.0000    1.0000    0.5000
    1.0000    1.0000    0.5625
    1.0000    1.0000    0.6250
    1.0000    1.0000    0.6875
    1.0000    1.0000    0.7500
    1.0000    1.0000    0.8125
    1.0000    1.0000    0.8750
    1.0000    1.0000    0.9375
    1.0000    1.0000    1.0000] ;  

end

答案 1 :(得分:1)

前段时间我不得不绘制极地数据并寻找类似的东西。我不知道它是否符合您的需求,但我根据您的问题调整了我的解决方案,现在是:

theta=(0:360)'*pi/180;
r=(0:0.1:1)';
value=repmat([360 (1:360)],size(r,1),1);
[THETA,R]=meshgrid(theta,r);
[X,Y]=pol2cart(THETA,R);
surf(X,Y,value,'edgecolor','none');
view(0,90);

更新:你绝对是安德烈,我怀疑3D图形占用更多内存,因此显示速度慢很多,但当时我没有找到任何更好的方式。你的解决方案更好,我将从现在开始使用它。我唯一要改变的是for循环:

r=1;
dtheta=0.01;
theta=linspace(0,2*pi,100)';
n=numel(theta);
[x,y]=pol2cart(theta,r);
figure;
cmap=colormap(jet);
X=[zeros(1,n-1);x(1:end-1)';x(2:end)';zeros(1,n-1)];
Y=[zeros(1,n-1);y(1:end-1)';y(2:end)';zeros(1,n-1)];
C=numel(cmap)*(1:n-1)/n-1;
patch(X,Y,C,'EdgeAlpha',0);
axis equal;