2012-02-03 89 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

相關問題