Разместите диск в Matlab, цвет меняется в зависимости от угла - PullRequest
3 голосов
/ 03 февраля 2012

Я хотел бы представить некоторые данные в зависимости от угла измерения.У меня есть что-то вроде этого:

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

В моем случае, length(angle)=73

Как мне построить диск, на котором цвет линии радиуса меняется в зависимости от значения вектора.1007 *

Я хотел бы что-то вроде imagesc, но на диске.

Я безуспешно пытался использовать rose, но он ограничен максимум 20 углами.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Это еще одна альтернатива, которая не использует 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 голос
/ 03 февраля 2012

Некоторое время назад мне пришлось строить полярные данные и искать что-то похожее.Я не знаю, соответствует ли это вашим потребностям, но я адаптировал свое решение к вашей проблеме, вот оно:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...