本文主要是介绍教你用MATLAB制作一款最有中秋特色的饼状图——月饼状图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0效果:
1素材说明:
我们需要在m文件路径下建立名为pic的文件夹,并且在里面放入下面这些图:
这些月饼图的制作方法参见上一篇:
中秋节快到了,一起用MATLAB绘制一款2.5D月饼叭
2完整代码:
function mmOOnnCCaaKKeestrSet={'蛋黄莲蓉',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:picNumfileName=strcat(path,files(i).name); [img,~,alp]=imread(fileName);imgSet{i}=img;alpSet{i}=alp;
endfig=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)-1boolSet=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制作一款最有中秋特色的饼状图——月饼状图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!