教你用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制作一款最有中秋特色的饼状图——月饼状图的主要内容,如果未能解决你的问题,请参考以下文章