




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Matlab数据可视化(2):基础篇II五.添加图例(源代码legends.m)在图像包含较多图形时,适当的图例对快速、正确的理解图像反映的信息是必不可少的。以下一个实例可以说明精心设计图例的重要性。我们在一幅图像中,同时绘出10个不同均值和方差的正态分布曲线。数据可以由如下代码生成,或直接加载10NormalDistributions.mat[plain]viewplaincopy%stdVectandmeanVectstdVect=[.49,.26,.93,.47,.25,.43,.7,.4,.18,.86];meanVect=[-.8,-.62,-.44,-.27,-.09,.09,.27,.44,.62,.8];%正态分布数据,每行一个t=-1:.02:1;dataVect=ones(10,length(t));fori=1:10dataVect(i,:)=(1/sqrt(2*pi)/stdVect(i))*...exp(-(t-meanVect(i)).A2/(2*stdVect(i)A2));end%图例说明legendMatrix=cell(1,10);fori=1:10legendMatrix{i}=[sprintf('mean=%.2f,std=%.2f,...meanVect(i),stdVect(i))];endlegend(legendMatrix);save('10NormalDistribution.mat','stdVect','meanVect',...'dataVect','legendMatrix');clear;1、首先,我们不加额外处理的使用图例。(图1)显然,这幅图的可读性非常差,我们很难将参数和图形对应起来,有的曲线颜色甚至还相同![plain]viewplaincopy%力口载数据meanVectstdVectlegendMatrixload10NormalDistributions;%绘图plot(dataVect');xlim([0,100]);%添加标注title({,10种不同的正态分布','图例不缺乏清晰度','颜色区分也不明显!'},'Color',[100]);xlabel('x');ylabel('x的概率密度函数');图12、我们通过改变曲线的颜色(color)、线型(linestyle)和标志(marker)的方式增加可读性,并将图例放置在图像外边。(图2)[plain]viewplaincopy%为不同曲线生成不同的设置LineStyles={'-',,--',':'};MarkerSpecs={'+','o'};ColorSpecs={'r','g','b','k'};cnt=1;fori=1:length(LineStyles)forj=1:length(MarkerSpecs)fork=1:length(ColorSpecs)LineSpecs{cnt}=[LineStyles{i}MarkerSpecs{j}...ColorSpecs{k}];cnt=cnt+1;endendendfigure;holdon;fori=1:10plot(dataVect(i,:),LineSpecs{i});endxlim([0100]);title({'10种不同的正态分布','使用不同的颜色和线型','可读性大大提高'});xlabel('x');ylabel('x的概率密度函数');legend(legendMatrix,'Location','NorthEastOutside',...'Fontsize',8);boxon;图23、有时候,我们可能会将图形分组。由于每执行一次绘图任务,legend的计数就会增加1,因此,在这种情况下,我们可以通过如下方式来减少图例数量。(图3)[plain]viewplaincopy%合并图例figure;hold;h1=plot(dataVect(1:6,:)','rd-','Color',[100]);h2=plot(dataVect(7:10,:)','k*--','Color',[000]);xlim([0100]);h=legend([h1(1),h2(1)],['Color1'char(10)'first6curves'],...['Color2'char(10)'remaining4curves'],...'Location','Best');%提高可读性,将图例字体颜色调整为与图形颜色一致%注意:每两个为一组,分别代表直线、标号和文字的颜色的属性,且顺序与所表示的图形顺序相反,即第一个绘制的图形的图例出现在数组的最后3个c=get(h,'Children');set(c(1:3),'Color',[0,0,0]);set(c(4:6),'Color',[1,0,0]);图34、利用legendlex优化图例。(图4)legendfex为我们提供了更加灵活的调整图例格式的功能。得用legendflex,我们不但可以调整说明的布局(指定分几行或几列显示),还可以单独调整图标和文字的大小,设定图例相对于任何对象的位置(原始legend限于坐标轴)。利用legendflex,我们还可以为图例添加小标题。legendflex可从之里下载。[plain]viewplaincopyfigure('units','normalized','position',...[0.41720.17690.30.5]);holdon;fori=1:10h(i)=plot(dataVect(i,:),LineSpecs{i});endxlim([0100]);legendflex(h,...%handletoplotlineslegendMatrix,...%correspondinglegendentries'ref,gcf,...%whichfigure'anchor',{'nw','nw'},...%locationoflegendbox'buffer',[30-5],...%anoffsetwrtthelocation'nrow',4,...%numberofrows'fontsize',8,...%fontsize'xscale',.5);%ascalefactorforactualsymbolstitle({'应用legendflex优化图像显示','可以调整相对位置、布局,字体及图标大小'});xlabel('x');ylabel('x的概率密度函数');图4六.通过数据变换突出细节特征(源代码trans.m)有些数据通过一定的变换后,更便于可视化,也更容易发现隐藏的信息。1、绘制一幅双Y轴图(图5)[plain]viewplaincopy%%生成数据x=1:50;r=5e5;E=[ones(1,30)linspace(1,0,15)zeros(1,5)];y1=r*(1+E).Ax;%%绘制又Y轴图形y2=log(y1);axes('position',[0.13000.11000.77500.7805]);[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');title({,利用对数变换增强数据','增长、稳定、衰减的可视化效果'});set(get(AX(1),'Ylabel'),'String','data');set(get(AX(2),'Ylabel'),'String','log(data)');xlabel('x');set(H1,'LineStyle','--');set(H2,'LineStyle',':');%%添加标注annotation('textarrow',[.26.28],[.67,.37],'String',['指数增长'char(10)'(1到30周期)']);annotation('textarrow',[.7.7],[.8,.64],'String',['非指数衰减'char(10)'(30到45周期)']);annotation('textarrow',[.809.859],[.669,.192],'String',['稳定'char(10)'(45到50周期)']);legend({'原始数据','对数变换后的数据'},'Location','Best');set(gcf,'Paperpositionmode','auto','Color',[111]);图52、在数字较大时,matlab会默认采用科学计数法,有时这可能不是我们想要的,我们可以通过如下方式处理。(图6)[plain]viewplaincopy%%关闭科学记数法格式%改变图像大小set(gcf,'units','normalized','position',[0.04110.51570.75100.3889]);%AX(1)存储的是原始数据的句柄title({'利用对数变换增强数据','增长、稳定、衰减的可视化效果','关闭科学计数法格式'});n=get(AX(1),'Ytick');set(AX(1),'yticklabel',sprintf('%d|',n'));图63、通过缩放坐标轴达到变换的目的上边实例中,我们通过对原始数据进行取对数操作达到变换的效果。由于对数操作的常用性,Matlab允许我们直接对X和Y轴进行对数缩放。semilogx、semilogy、loglog可以分别对X轴、Y轴和XY轴进行对数缩放。这也可以通过设置坐标轴的xscale和yscale属性实现。[plain]viewplaincopy%%直接利用semilogx,semilogy,loglogfigure;subplot(2,1,1);semilogy(x,y1);xlabel('x');ylabel('取对数后数据,);title({'MATLAB的semilogy函数',...'直接将Y轴对数缩放后显示,});subplot(2,1,2);plot(x,y1);set(gca,'yscale','log');xlabel('x');ylabel('取对数后的数据');title({'使用常规的plot进行绘图','然后通过理性属性达到相同目的'});图7七.多图的绘制(源代码subfig.m)1、常规子图的绘制我们利用苹果公司2011年度每日股票交易数据为例,绘制包括开盘价、最高价、最低价、收盘价、成交量和临近收盘价在内的6个趋势图。首先加载数据[plain]viewplaincopy%%加载数据并按时间先后顺序排列[AAPLdateAAPL]=xlsread('AAPL_090784_012412.csv');dateAAPL=datenum({dateAAPL{2:end,1}});dateAAPL=dateAAPL(end:-1:1);AAPL=AAPL(end:-1:1,:);%选择时间窗口(2011年全年)rangeMIN=datenum('1/1/2011');rangeMAX=datenum('12/31/2011');idx=find(dateAAPL>=rangeMIN&dateAAPL<=rangeMAX);然后,通过subplot命令绘图(图8)[plain]viewplaincopy%%使用subplot绘图命令绘制常规子图网格%注意设置各个子图的标题内容的title命令的位置figure('units','normalized','position',[0.06090.05930.58440.8463]);matNames={'开盘价',,最高价',,最低价',收盘价','成交量','临近收盘价'};fori=1:6subplot(3,2,i);plot(idx,AAPL(idx,i));ifi〜=5title([matNames{i}'$,subplot(3,2,'num2str(i)')'],'Fontsize',12,'Color',[100]);ylabel('美元,);elsetitle([matNames{i}'vol,subplot(3,2,'num2str(i)')'],'Fontsize',12,'Color',[100]);ylabel('成交量,);endset(gca,'xtick',linspace(idx(1),idx(end),12),'xticklabel',...datestr(linspace(dateAAPL(idx(1)),dateAAPL(idx(end)),12),...'mm'),'Fontsize',10,'fontweight','bold');rotateXLabels(gca,40);boxon;axistightend%添加总标题annotation('textbox',[0.370.960.480.03],'String','2011年度苹果公司股价趋势','Fontsize',14,'Linestyle','none');图82、进阶篇我们可以自定义子图的布局,并且子图可以是任何一种图形。下面我们绘制包括3个垂直排列的子图(由上而下编号1、2、3)的图像(如图9)。子图1展示选定时间窗口内的股价走势,子图2展示相同时期内的成交量,子图3则显示全部时间内股价的变化情况。图9子图1是一个面积图,可通过area命令绘制。[plain]viewplaincopy%%自定义子图布局figure('units','normalized','Position',[0.04270.21020.60260.6944]);%%子图1显示收盘价随时间的变化趋势%设置坐标轴位置Panel1=axes('Position',[0.05700.55200.88500.3730]);hold;%绘制面积图area(AAPL(idx,4),'FaceColor',[188210238]/255,'edgecolor',[54100139]/255);%设置坐标轴相关参数xlim([1length(idx)]);yminv=min(AAPL(idx,4))-.5*range(AAPL(idx,4));ymaxv=max(AAPL(idx,4))+.1*range(AAPL(idx,4));ylim([yminvymaxv]);boxon;%绘制网格线set(gca,'Ticklength',[00],'YAxisLocation','right');line([linspace(1,length(idx),15);linspace(1,length(idx),15)],[yminv*ones(1,15);ymaxv*ones(1,15)],'Color',[.9.9.9]);line([ones(1,10);length(idx)*ones(1,10)],[linspace(yminv,ymaxv,10);linspace(yminv,ymaxv,10);],'Color',[.9.9.9]);%设置注解set(gca,'xtick',linspace(1,length(idx),10),'xticklabel',datestr(linspace(dateAAPL(idx(1)),dateAAPL(idx(end)),10),'ddmmmyy'));title({'苹果公司股票价格,','(选定时间窗口内细节展示)'},'Fontsize',12);子图2是一个条形图,可通过bar命令绘制。[plain]viewplaincopy%%子图2展示相同时间段内成交量的变化情况%设置坐标轴位置Panel2=axes('Position',[0.05700.29470.88500.1880]);%用条形图绘图bar(1:length(idx),AAPL(idx,5),.25,...'FaceColor',[54100139]/255);hold;xlim([1length(idx)]);holdon;%添加网格线yminv=0;ymaxv=round(max(AAPL(idx,5)));line([linspace(1,length(idx),30);...linspace(1,length(idx),30)],...[yminv*ones(1,30);ymaxv*ones(1,30)],...'Color',[.9.9.9]);line([ones(1,5);length(idx)*ones(1,5)],...[linspace(yminv,ymaxv,5);...linspace(yminv,ymaxv,5);],'Color',[.9.9.9]);ylim([yminvymaxv]);%设置特殊的时间刻度set(gca,'Ticklength',[00],...'xtick',linspace(1,length(idx),10),'xticklabel',...datestr(linspace(dateAAPL(idx(1)),dateAAPL(idx(end)),10),...'ddmmmyy'));tickpos=get(Panel2,'ytick')/1000000;fori=1:numel(tickpos)C{i}=[num2str(tickpos(i))'M'];endset(Panel2,'yticklabel',C,'YAxisLocation','right');text(0,1.15*ymaxv,'成交量','VerticalAlignment','top',...'Color',[54100139]/255,'Fontweight','bold');子图3是也一个面积图,其中选定时间段被高亮,这是通过在大图上叠加绘制一个与子图1相同颜色的小得到。[plain]viewplaincopy%%子图3展示全部时间段内股价变化情况,其中被选中的时间窗口高亮显示Panel3=axes('Position',[0.05700.11000.88500.1273]);area(dateAAPL,AAPL(:,4),'FaceColor',[234234234]/255,'edgecolor',[.8.8.8]);hold;line([min(idx)min(idx)],get(gca,'ylim'),'Color','k');line([max(idx)max(idx)],get(gca,'ylim'),'Color','k');set(gca,'Ticklength',[00]);%相同颜色重新绘制时间窗口内的趋势area(dateAAPL(idx),AAPL(idx,4),'FaceColor',[188210238]/255,'edgecolor',[54100139]/255);ylim([min(AAPL(:,4))1.1*max(AAPL(:,4))]);xlabel('长期股价走势,);line([min(get(gca,'xlim'))min(get(gca,'xlim'))],get(gca,'ylim'),'Color',[111]);line([max(get(gca,'xlim'))max(get(gca,'xlim'))],get(gca,'ylim'),'Color',[111]);line(get(gca,'xlim'),[max(get(gca,'ylim'))max(get(gca,'ylim'))],'Color',[111]);line(get(gca,'xlim'),[min(get(gca,'ylim'))min(get(gca,'ylim'))],'Color',[111]);set(gca,'xticklabel',datestr(get(gca,'xtick'),'yyyy'),'yticklabel',[]);八.可视化直观地比较实验结果(源代码comparison.m)这涉及多种方法的对比实验中,选择适当的方式进行可视化分析,有助于我们快速、直观地对各种方法的优劣进行评判。我们以五种聚类算法在5个测试集上的实验结果为数据,通过绘图对其进行比较。我们已经知道,matlab自带有多种配色方案(colormap)可供选择,我们还可以自定义配色方案。为了保证配色的友好性和易区分性,我们可以通过在线工具colorbrewer(/),对配色进行测试,辅助我们找到比较好的方案。图10[plain]viewplaincopy%%定义可视化方案%设定图像大小和位置figure('units','normalized','Position',[0.08800.10280.60000.6352]);%绘制一个隐藏的坐标轴,其X轴刻度标签列出进行比较的五种算法的名称hh=axes('Position',[.1,.135,.8,.1]);set(gca,'Visible','Off','TickLength',[0.00.0],'TickDir','out','YTickLabel','','xlim',[0nosOfMethods],'FontSize',11,'FontWeight','bold');set(gca,'XTick',.5:nosOfMethods-.5,'XTickLabel',{'KMeans','FuzzyCMeans','Hierarchical','MaximizeExpectation','Dendogram'});catgeoryLabels={'FreshTissue','FFPE','Blood','DNA','Simulated'};rotateXLabels(gca,20);%将Y轴长等分为五份,分别分配给5个测试集结果y=linspace(.142,.75,nosOfCategories);%Placeanaxesforcreatingeachrowdedi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 育婴师在职能力评估试题及答案
- 激光工程师的职业定位考题试题及答案
- 考中取胜的初级会计师试题及答案
- 现代图书管理员素质模型试题及答案
- 服装开发考试题及答案
- 畜牧经营管理试题及答案
- 网络规划设计师考试的个人经验分享及试题及答案
- 药品不良反应处理技巧试题及答案
- 激光技术创新实例分析试题及答案
- 药剂配方设计试题及答案
- 2025年03月四川成都农业科技中心公开招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 农村兄弟林地协议书
- 2024北京房山区高一(下)期中数学试题及答案
- 【幼儿园绘本故事】神笔马良
- 2025年03月国家机关事务管理局所属事业单位公开招聘应届毕业生14人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 信息安全等级保护管理办法
- 全过程工程咨询投标方案(技术方案)
- 旅拍店合伙人协议书范本
- 百科知识竞赛PPT(可直接使用)
- 项目管理承包(PMC)模式深入分析及规范化管理程序
- 《复式折线统计图》说课稿
评论
0/150
提交评论