小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Matlab數(shù)據(jù)可視化(3):一維數(shù)據(jù)繪圖 I

 lynchlynch12 2013-11-15
以下介紹一維數(shù)據(jù)的可視化。

一. 餅狀圖、根狀圖和梯形圖

1) 餅狀圖

(源代碼:pie_stem_stairs.m)


餅狀圖可以直觀地表示百分比的相對(duì)大小。餅狀圖可以由matlab的pie命令繪制。其中,我們可以將某些數(shù)據(jù)從餅中分離以強(qiáng)調(diào)顯示(圖1)。
  1. Expenses = [20 10 40 12 20 19 5 15];  
  2. ExpenseCategories = {'食品','藥品','住宿','其他','交通',...  
  3. '水電','禮品','購(gòu)物'};  
  4. MostLeastExpensive = ...  
  5. (Expenses==max(Expenses)|Expenses==min(Expenses));  
  6.   
  7. figure();  
  8. h=pie(gca,Expenses,MostLeastExpensive,ExpenseCategories);  
  9. % 命令為每一個(gè)數(shù)據(jù)項(xiàng)返回一個(gè)文本句柄(text handle,h的偶數(shù)項(xiàng))  
  10. % 可以通過(guò)句柄改變字體大小  
  11. for i =2:2:16;set(h(i),'fontsize',14);end  
  12.   
  13. % 添加標(biāo)注  
  14. title('年度支出報(bào)告','fontsize',14);  



圖 1

2) 根狀圖

根狀圖可由stem命令繪制,根狀圖常用來(lái)表示連續(xù)信號(hào)的離散采樣數(shù)據(jù)(圖2)。
  1. %% 根狀圖  
  2. figure;  
  3. x = linspace(0,2,100);  
  4. x1 = x(1:13:end);  
  5. x2 = x(1:5:end);  
  6. y = exp(.3*x).*cos(-2*x);  
  7. yy = round(rand(1,length(x1)));yy(yy==0)=-1;  
  8. y1 = exp(.3*x1).*cos(-2*x1)+yy.*rand(1,length(x1));  
  9. yy = round(rand(1,length(x2)));yy(yy==0)=-1;  
  10. y2 = exp(.3*x2).*cos(-2*x2)+yy.*rand(1,length(x2));  
  11. plot(x,y); hold on;  
  12. h1 = stem(x1,y1);  
  13. h2 = stem(x2,y2);  
  14.   
  15. % 設(shè)置標(biāo)志的大小和樣式  
  16. set(h1,'MarkerFaceColor','green','Marker','o','Markersize',7,'Color',[0 0 0]);  
  17. set(h2,'MarkerFaceColor','red','Marker','s','Color',[0 0 0]);  
  18. xlabel('x');ylabel('信號(hào)');  
  19. title({'以一定的采樣率對(duì)連續(xù)信號(hào)進(jìn)行采樣','由于噪聲的存在,采樣不完美'});  
  20. legend({'原始信號(hào)','帶噪聲離散化1','帶噪聲離散化2'});  
  21. print(gcf,'-dpng','./stem.png');  



圖 2

3) 梯形圖

梯形圖可由stairs命令得到,它常常用于數(shù)據(jù)之間連線并無(wú)意義的情況下的繪圖,在數(shù)據(jù)密集的情況下,也可以用梯形圖代替柱狀圖。(圖3)
  1. %% 梯形圖  
  2.   
  3. %figure('units','normalized','position',[0.1 0.1 0.6 0.6]);  
  4. figure;  
  5. % 加載數(shù)據(jù)  
  6. load algoResultsData.mat  
  7. % 增加一行NaN,以使最梯形圖最后是一條水平線(而非上升線)  
  8.   
  9. h=stairs([MethodPerformanceNumbers nan(5,1)]');  
  10. legendMatrix = {'Fresh Tissue','FFPE',...  
  11. 'Blood','DNA','Simulated'};  
  12. for i = 1:5;  
  13. set(h(i),'linewidth',2); % 加粗線條  
  14. % y在圖例說(shuō)明后面加注“共計(jì)…個(gè)”   
  15. legendMatrix{i} = [legendMatrix{i} ...  
  16.     ', 共計(jì)' num2str(CategoryTotals(i)) '個(gè)'];  
  17. end  
  18. set(gca,'xlim',[0.5 6.5],...  
  19. 'XTick',1.5:nosOfMethods+1,...  
  20. 'XTickLabel',{'K Means','Fuzzy C Means',...  
  21. 'Hierarchical','Maximize Expectation','Dendogram'});  
  22.   
  23. % 添加標(biāo)注  
  24. title({'5種聚類算法在','5個(gè)測(cè)試集上測(cè)試結(jié)果'},'fontsize',15);  
  25. legendflex(h,... %handle to plot lines  
  26. legendMatrix,... %corresponding legend entries  
  27. 'ref', gcf, ... %which figure  
  28. 'anchor', {'ne','ne'}, ...%location of legend box  
  29. 'buffer',[0 0], ... % an offset wrt the location  
  30. 'fontsize',8,... %font size  
  31. 'xscale',.5); %a scale factor for symbols  
  32. rotateXLabels(gca,20);  
  33. set(gca,'position',[0.1139    0.1989    0.7750    0.6638]);  
  34. set(gcf,'color',[1 1 1],'paperpositionmode','auto');  




圖 3

二. 盒形圖

(源代碼boxplots.m)

盒形圖(box plot)又名盒須圖(box-and-whisker diagram)。它能在一副圖中同時(shí)表示多種統(tǒng)計(jì)信息。具體而言,包括如下五種統(tǒng)計(jì)量:中位數(shù)(median,Q2)

上下四分位數(shù)(Q1、Q3)和最大最小值。其中,Q1和Q3構(gòu)成盒子,胡須分別向上和向下延伸到最大值和最小值處。

接下來(lái),我們利用matlab自帶的命令plotbox,繪制14種癌癥的第105號(hào)基因表達(dá)水平的盒形圖(圖4)。

  1. % 加載14種癌癥基因表達(dá)數(shù)據(jù),共16063組基因,144+54=198個(gè)樣本  
  2. load 14cancer.mat  
  3.   
  4. figure('units','normalized','Position',[0    0    0.8    0.8]);  
  5. data = [Xtrain(:,0105); Xtest(:,0105)];  
  6. labels = [ytrainLabels ytestLabels];  
  7. boxplot(data,labels,'labels',classLabels);  
  8.   
  9. ylabel('基因表達(dá)水平','fontsize',12);  
  10. title({'盒狀圖表示198個(gè)樣本的基因','在14種癌癥上的表達(dá)水平'},'fontsize',12);  


圖 4

第三方函數(shù)aboxplot,提供了更高級(jí)的功能,我們可以為盒形圖上色,同時(shí)繪制多組盒形圖等。

首先,繪制單獨(dú)一組盒形圖(圖5)。

  1. figure;  
  2. x1 = normrnd(5,2,10000,1); % 期望為5,方差為2的正態(tài)分布的10000個(gè)數(shù)據(jù)  
  3. x2 = normrnd(10,2,10000,1); % 期望為10,方差為2的正態(tài)分布的10000個(gè)數(shù)據(jù)  
  4. x3 = normrnd(15,2,10000,1); % 期望為15,方差為2的正態(tài)分布的10000個(gè)數(shù)據(jù)  
  5.   
  6. x = cat(2,x1,x2,x3); % 將三組數(shù)據(jù)連接成 10000 x 3 的矩陣  
  7. aboxplot(x,'labels',[5,10,15],'Colorgrad','green_down','OutlierMarker','*','OutlierMarkerSize',1,'WidthE',0.2,'WidthS',0.6); % 利用aboxplot繪圖  
  8. xlabel('\mu'); % X軸標(biāo)簽  
  9. title('利用aboxplot,繪制更加精制的盒形圖');  
圖5

然后,我們繪制含有三組數(shù)據(jù)的盒形圖(圖6)。

  1. figure;  
  2. % 第一組標(biāo)準(zhǔn)差都為2  
  3. x1 = normrnd(5,2,10000,1);  
  4. x2 = normrnd(10,2,10000,1);  
  5. x3 = normrnd(15,2,10000,1);  
  6. % 第二組標(biāo)準(zhǔn)差都為4  
  7. y1 = normrnd(5,4,10000,1);  
  8. y2 = normrnd(10,4,10000,1);  
  9. y3 = normrnd(15,4,10000,1);  
  10. % 第三組標(biāo)準(zhǔn)差都為6  
  11. z1 = normrnd(5,6,10000,1);  
  12. z2 = normrnd(10,6,10000,1);  
  13. z3 = normrnd(15,6,10000,1);  
  14.   
  15. % 將每組數(shù)據(jù)連接成 10000 x 3 的矩陣  
  16. x = cat(2,x1,x2,x3);   
  17. y = cat(2,y1,y2,y3);  
  18. z = cat(2,z1,z2,z3);  
  19.   
  20. % 將三組數(shù)據(jù)連接成 3 x 10000 x 3 的矩陣  
  21. h = cat(1, reshape(x,[1 size(x)]), reshape(y,[1 size(y)]), reshape(z,[1 size(z)]));  
  22.   
  23. aboxplot(h,'labels',[5,10,15],'colorgrad','orange_down','colorrev',true); % 繪圖; 顏色默認(rèn)為藍(lán)色,這里設(shè)為橙色; colorrev默認(rèn)為false,可以改為默認(rèn)值觀察變化  
  24. xlabel('\mu'); % X軸標(biāo)簽  
  25. legend('\sigma=2','\sigma=4','$\sigma=6'); % 添加圖例  
  26. title('同時(shí)繪制多組盒形圖');  


圖 6

三. 迷你圖(sparkline)

(源代碼:sparklines.m)

sparkline最初是由Edward Tufte(愛(ài)德華塔夫特)提出的,是一類信息體積小和數(shù)據(jù)密度高的圖表。目前它被用作一些測(cè)量,相關(guān)的變化的信息呈現(xiàn)的方式,如平均溫度,股市交投活躍。sparkline也常常以一組多條的形式出現(xiàn)在柱狀圖,折線圖當(dāng)中。

以下我們用迷你圖繪制谷歌等7家公司2011年全年的股價(jià)信息。(圖7)

  1. %% 加載數(shù)據(jù)  
  2. [dt{1} dateD{1}] = xlsread('AAPL_090784_012412.csv');  
  3. [dt{2} dateD{2}] = xlsread('GOOG_090784_012412.csv');  
  4. [dt{3} dateD{3}] = xlsread('MSFT_090784_012412.csv');  
  5. [dt{4} dateD{4}] = xlsread('SLB_090784_012412.csv');  
  6. [dt{5} dateD{5}] = xlsread('YHOO_090784_012412.csv');  
  7. [dt{6} dateD{6}] = xlsread('S&P_090784_012412.csv');  
  8. [dt{7} dateD{7}] = xlsread('GE_090784_012412.csv');  
  9. stocks = {'AAPL','GOOG','MSFT','SLB','YHOO','S&P','GE'};  
  10. rangeMIN = datenum('1/1/2011');  
  11. rangeMAX = datenum('12/31/2011');  
  12.   
  13. %% 數(shù)據(jù)預(yù)處理  
  14. for i = 1:length(dt)      
  15.     % 數(shù)據(jù)處理  
  16.     % 將日期轉(zhuǎn)化為數(shù)字形式  
  17.     dateD{i} = datenum({dateD{i}{2:end,1}});  
  18.     % 查找日期區(qū)間  
  19.     idx = find(dateD{i} >= rangeMIN & dateD{i} <= rangeMAX);  
  20.     dt{i} = dt{i}(idx);   
  21.     % 提取區(qū)間內(nèi)的數(shù)據(jù)  
  22.     dateD{i} = dateD{i}(idx);  
  23.     % 標(biāo)準(zhǔn)化數(shù)據(jù)  
  24.     dtn{i} = dt{i}./max(dt{i});  
  25.     clear idx  
  26.     labels2{i} = num2str(dt{i}(end));      
  27. end  
  28.   
  29. %% 繪制迷你圖  
  30. sparkline(dateD,dtn,stocks,labels2);  


圖7

實(shí)際的繪制工作由sparkline命令完成,方法是將7條表示股價(jià)信息的曲線繪制在同一個(gè)figure中,高度分別相關(guān)若干距離。代碼如下:

  1. function sparkline(xdata,ydata,labels1,labels2)  
  2.   
  3. %SPARKLINE(XDATA,YDATA,LABELS1,LABELS2) creates a graph with sparklines  
  4. % XDATA and YDATA are cell arrays of vectors of x and corresponding y  
  5. % values. LABELS1 give the labels you want corresponding to each sparkline  
  6. % to be located at the start of the line. LABELS2 give the labels you want   
  7. % corresponding to each sparkline to be located at the end of the line.   
  8.   
  9. % No borders necessary - span the axes out to total available space  
  10. % make the plots by bumping up each sparkline with an arbitrary unit of  
  11. % separation. Here unitOfSep=1;  
  12. unitOfSep=1;  
  13.   
  14. figure; axes('position',[0 0 1 .9]);hold on;  
  15. endPt = -1;  
  16. startPt = 1e100;  
  17. for i = 1:length(xdata)  
  18.     % Plot SparkLines  
  19.     plot(xdata{i}, ydata{i}+ (i-1)*+unitOfSep,'k');   
  20.       
  21.     maxp{i} = find(ydata{i}==max(ydata{i}));   
  22.     minp{i} = find(ydata{i}==min(ydata{i}));  
  23.   
  24.     plot(xdata{i}(maxp{i}),ydata{i}(maxp{i})+ (i-1)*+unitOfSep,'bo','MarkerFaceColor','b');  
  25.     plot(xdata{i}(minp{i}),ydata{i}(minp{i})+ (i-1)*+unitOfSep,'ro','MarkerFaceColor','r');  
  26.     text(xdata{i}(end), mean(ydata{i})+ (i-1)*+unitOfSep,labels1{i},'HorizontalAlignment','right');  
  27.     text(xdata{i}(1), mean(ydata{i})+ (i-1)*+unitOfSep,labels2{i},'HorizontalAlignment','left');  
  28.       
  29.     endPt = max([xdata{i}(1) endPt]);  
  30.     startPt= min([xdata{i}(end) startPt]);  
  31. end  
  32. text(startPt+50, i*unitOfSep+.7,'1/1/2011 到 12/31/2011股價(jià)迷你圖','fontsize',14);  
  33. set(gca,'visible','off','ylim',[0+unitOfSep/2 i*unitOfSep+unitOfSep/2],...  
  34.     'yticklabel',[],'xlim',[startPt-.15*(endPt-startPt) endPt+.15*(endPt-startPt)],...  
  35.     'xticklabel',[],'TickLength',[0 0]);  
  36. set(gcf,'Color',[1 1 1],'Paperpositionmode','auto');  

四. 堆疊折線圖(stacked line graph)

(源代碼:stackedlines.m)

堆疊折線圖可以表示多組數(shù)據(jù)變化趨勢(shì)。以下我們利用繪制面積圖的area命令制作堆疊折線圖。我們已有15個(gè)名字的受歡迎程度在各個(gè)年份的排名,我們即要用圖像表示出這個(gè)趨勢(shì)。(圖8)

  1. %% 加載數(shù)據(jù)  
  2. [ranksoverdecades names] = xlsread('MockDataNameVoyager.xlsx');  
  3. sex = names(2:end,2);  
  4. names = names(2:end,1);  
  5. years = ranksoverdecades(1,:);  
  6. ranksoverdecades = ranksoverdecades(2:end,:);  
  7. ranksoverdecades = ranksoverdecades';  
  8. % 將男孩名字和女孩名字分開(kāi)  
  9. males = find(strcmp(sex,'M'));  
  10. fmales = find(strcmp(sex,'F'));  
  11. ymax=max(max(cumsum(ranksoverdecades,2)));  
  12.   
  13. % 計(jì)算名字標(biāo)簽的位置的y坐標(biāo)  
  14. nameLoc = cumsum(ranksoverdecades(end,:));  
  15. nameLoc = [0 nameLoc];  
  16. nameLoc = (nameLoc(1:end-1) + nameLoc(2:end))/2;  
  17.   
  18. %% 布局  
  19. figure('units','normalized','Position',[ 0.3432    0.1472    0.6542    0.7574]);  
  20. % 創(chuàng)建主坐標(biāo)軸  
  21. axes('position',[.05,.1,.87,.85],'ylim',[0 ymax],'xlim',[min(years) max(years)],'YAxisLocation','right',...  
  22.     'ytick',nameLoc,'yticklabel',names,'ticklength',[0.01 0.05],'tickdir','out','fontsize',14);  
  23. % 另建一個(gè)坐標(biāo)軸,繪制面積圖  
  24. axes('Position',get(gca,'Position'));  
  25. % 繪制拆線  
  26. h = area(years,ranksoverdecades);  
  27. % 按性別設(shè)定顏色,男孩為藍(lán)色,女孩為粉色  
  28. set(h(males),'FaceColor',[100   149 237]/255)  
  29. set(h(fmales),'FaceColor',[255  192 203]/255);  
  30. % fix edgecolor and x and y limits  
  31. set(h,'edgecolor',[.5 .5 .5]) % Set all to same value  
  32. set(gca,'ylim',[0 ymax],'xlim',[min(years) max(years)],'xticklabel',[],'fontsize',14);  
  33. box on;  
  34. % annotate the graph  
  35. title('嬰兒名字趨勢(shì)圖','Fontsize',14);  
  36. ylabel('排名隨年份的變化','Fontsize',14);  
  37. text(mean(get(gca,'xlim')),-11,'年份','Fontsize',14);  
圖 8

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多