饼图着色

时间:2014-10-12 22:06:47

标签: matlab pie-chart

我想创建一个饼图而不使用命令' pie'在matlab中。我已经以某种方式管理但我没有为这些片段着色。有人可以帮助我如何做到这一点:下面是我的代码:

function pie_chart

r = 1;
v = [10 15 20 25 30];

C = ['r' 'g' 'b' 'm' 'c'];

t= 0:0.01:2*pi;

x = r * cos(t);
y = r * sin(t);

plot(x,y, 'k');hold on

for k=1:length(v)

  t=[v/sum(v)*2*pi];

  for t=1:length(t)

    x=[0 r *cos(t)];
    y=[0 r *sin(t)];

    plot(x,y); hold on

    fill(x,y,'C');

  end

  axis square

  axis off

end

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误:

当您声明C = ['r' 'g' 'b' 'm' 'c'];时,您会在[]之间连接字符串,因此您最终得到了C='rgbmc'。最好通过使用花括号{}将其声明为cell数组。因此,您的声明变为:C = {'r' 'g' 'b' 'm' 'c'};

fill函数需要一个封闭区域来填充。你只向函数发送了2个点坐标(所以基本上是一条线),所以它只是给线条着色。

实际上,它甚至没有着色,因为您指定'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