matlab數據可視化:基礎篇ii_第1頁
matlab數據可視化:基礎篇ii_第2頁
matlab數據可視化:基礎篇ii_第3頁
matlab數據可視化:基礎篇ii_第4頁
matlab數據可視化:基礎篇ii_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論