Были несколько ошибок в коде:
Когда вы объявляете C = ['r' 'g' 'b' 'm' 'c'];
вы конкатенации строк между []
, поэтому вы закончили с C='rgbmc'
. Лучше объявить его как массив cell
, используя фигурные скобки {}
. Таким образом, ваша декларация становится следующей: C = {'r' 'g' 'b' 'm' 'c'};
Функция fill
нуждается в закрытой области для заполнения. Вы отправляли только две координаты точки в функцию (так что в основном строка), поэтому она только окрашивала линию.
На самом деле, это было даже не окраска, потому что вы указывали 'C'
как цвет. Вы должны отправить одну из строк, содержащихся в вашем массиве ячеек: C{k}
Наконец, вам не нужна двойная петля, достаточно одного цикла над вашим различным квадрантом (вы определяли t
во внешнем цикле, затем сразу же переписывая его при объявлении второго цикла).
Следующий код производит цветную круговую диаграмму. Если вы не понимаете некоторые аспекты, я предлагаю вам запустить его по очереди и посмотреть содержимое переменной в рабочей области.
function pie_chart
% Define quadrants and color
r = 1;
v = [10 15 20 25 30];
C = {'r' 'g' 'b' 'm' 'c'};
theta = linspace(0,2*pi,359) ;
idx_spokes = round([1 cumsum(v)/100*length(theta) ]) ; %// find the indices of the spokes
for k=1:length(idx_spokes)-1
t = theta(idx_spokes(k):idx_spokes(k+1)) ;
x=[0 r*cos(t) 0];
y=[0 r*sin(t) 0];
plot(x,y); hold on
fill(x,y, C{k});
end
axis square
axis off
in 'fill (x, y, 'C')' - ''C' 'не является цветом. Вы, наверное, хотели '' c'' или 'C (t)' – thewaywewalk