2012-02-03 88 views
3

我想根据度量角度来表示一些数据。我有类似的东西:在Matlab中绘制一张光盘,颜色随角度变化

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

在我的情况下,length(angle)=73

我如何可以绘制一个磁盘在半径线的颜色根据矢量值变化。

我想像imagesc,但在光盘。

我尝试使用玫瑰尝试失败,但限制为最多20个角度。

回答

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

前段时间我不得不绘制极地数据并寻找类似的东西。我不知道这是否符合您的需求,但我适应我解决您的问题,那就是:

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); 

UPDATE:你是绝对正确的安德烈,我怀疑的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; 
+0

+1 - 看起来很不错!但它是一个3D图形。对于某些用途可能会有问题。 – 2012-02-03 19:47:48

+0

也就是说,当您旋转图像时,您会看到“楼梯”效果。 – 2012-02-03 19:58:12

+0

嗨,谢谢。对于我的用法,它变得完美。 – Castim 2012-02-06 12:30:45

相关问题