我想创建一个饼图而不使用命令' 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
答案 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