【问题标题】:Pie chart coloring饼图着色
【发布时间】:2014-10-13 15:07:34
【问题描述】:

我想在 matlab 中不使用命令 'pie' 来创建饼图。我以某种方式设法解决了问题,但我未能为这些部分着色。有人可以帮我怎么做:下面是我的代码:

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

【问题讨论】:

  • in fill(x,y,'C') - 'C' 不是颜色。你可能想要'c'C(t)

标签: matlab pie-chart


【解决方案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

【讨论】:

  • 非常感谢。真的很感谢你的努力。我明白我在哪里弄错了。
  • @Jesuit 如果此答案适合您,请考虑通过单击旁边的“V”图标“接受”它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多