教你用MATLAB制作一款最有中秋特色的饼状图——月饼状图

Posted slandarer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你用MATLAB制作一款最有中秋特色的饼状图——月饼状图相关的知识,希望对你有一定的参考价值。

0效果:

1素材说明:
我们需要在m文件路径下建立名为pic的文件夹,并且在里面放入下面这些图:

这些月饼图的制作方法参见上一篇:
中秋节快到了,一起用MATLAB绘制一款2.5D月饼叭

2完整代码:

function mmOOnnCCaaKKee

strSet={'蛋黄莲蓉',40/100;
      '抹茶',20/100;
      '紫薯',15/100;
      '鲜肉',15/100;
      '辣椒炒肉',10/100};
  
  
probVal=cell2mat(strSet(:,2));
% 将概率密度函数转换为概率分布函数
for i=2:length(probVal)
    probVal(i)=probVal(i)+probVal(i-1);
end
probVal=[0,probVal'];


path='.\\pic\\';%文件夹名称
files=dir(fullfile(path,'*.png')); 
picNum=size(files,1);

%遍历路径下每一幅图像
for i=1:picNum
   fileName=strcat(path,files(i).name); 
   [img,~,alp]=imread(fileName);
   imgSet{i}=img;
   alpSet{i}=alp;
end

fig=figure('units','pixels',...
        'position',[20 60 560 560],...
        'Color',[1 1 1]);
ax=axes('Units','pixels',...
        'parent',fig,...  
        'Color',[1 1 1],...
        'Position',[0 0 560,560],...
        'XLim',[0,100],...
        'YLim',[0,100],...
        'XColor','none',...
        'YColor','none');
hold(ax,'on')
ax.YDir='reverse';
ax.XDir='normal';

[nrow,ncol,~]=size(imgSet{1});
[XMesh,YMesh]=meshgrid((1:ncol)-(1+ncol)/2,(1:nrow)-(1+nrow)/2);
%disMesh=sqrt(XMesh.^2+YMesh.^2);
thetaMesh=atan2(YMesh,XMesh)+pi;
thetaMesh=thetaMesh(:,end:-1:1);

for i=1:length(probVal)-1
    boolSet=thetaMesh;
    boolSet=boolSet>probVal(i)*2*pi&boolSet<probVal(i+1)*2*pi;
    boolSet=alpSet{i}==255&boolSet;
    
    theta=(probVal(i)+probVal(i+1))*pi;
    
    image(ax,[0,100]+cos(theta).*2,-5+[0,100]-sin(theta).*2,imgSet{i},'alphaData',boolSet,'Interpolation','bilinear');
    text(ax,50+cos(theta).*42,50-sin(theta).*44,strSet{i,1},'FontSize',20,'Color',[0.3,0.4,0.2],...
         'HorizontalAlignment','center','FontWeight','bold','BackgroundColor',[1,1,1,.8],...
         'EdgeColor',[0.4,0.3,0.2,0.8],'LineWidth',1)
end
end

原理也很简单,就是根据strSet里的数据计算出各个部分夹角,再根据夹角计算bool值作为alphaData的参数即可,文件和程序完整连接如下:

链接:https://pan.baidu.com/s/1UmjPBdowoX6BRIhphoIlRQ
提取码: r5h5

以上是关于教你用MATLAB制作一款最有中秋特色的饼状图——月饼状图的主要内容,如果未能解决你的问题,请参考以下文章

怎么制作三维饼状图

python绘制带有负百分比的饼状图

wps立体饼图怎么制作方法

简单的饼状图

devexpress 饼状图 label 重叠怎么解决啊?

用canvas绘制的饼状图,6等分,颜色随机