matlab 泡泡图,使用matlab绘制2维、3维气泡图
在學(xué)習(xí)模糊c均值聚類時,突然想到能否將每個樣本對所屬簇的奴屬度(C)用氣泡圖的形式表示出來,這樣就可以在一張圖上同時獲得分類與奴屬度(C)兩類信息。在matlab中沒有繪制氣泡圖的專用函數(shù),不過可以通過手動設(shè)置參數(shù),來最終達(dá)到氣泡圖的效果。以下是實(shí)現(xiàn)代碼。
二維氣泡圖的繪制
% 這個腳本用來對模糊c均值聚類生成二維氣泡圖
clc
clear
%% 獲得模糊c均值聚類的結(jié)果數(shù)據(jù)
load fcmdata.dat
[centers,U] = fcm(fcmdata,2); % 返回聚類中心信息以及每個數(shù)據(jù)點(diǎn)奴屬與各聚類中心的值
index1 = find(U(1,:)==max(U));% 使用find()函數(shù)找到屬于第一個聚類中心的元素序號
index2 = find(U(2,:)==max(U));% 獲得屬于第二個聚類中心的元素序號
%% 繪制二維bubble圖
figure
weight = normalize(max(U),'range')*600; % 一種擴(kuò)大一組數(shù)據(jù)之間差距的方法,否則氣泡效果不明顯
weight(weight==0)=(1/20)*mean(weight);% 粗略將0值轉(zhuǎn)化為1/20的均值(這是估計(jì)出來的)
% 繪制第一個簇的氣泡圖
for i=1:length(index1)
scatter(fcmdata(index1(i),1),fcmdata(index1(i),2),weight(index1(i)),...
'MarkerEdgeColor','k','MarkerEdgeAlpha',0,'MarkerFaceColor','r',...
'MarkerFaceAlpha',0.3);
hold on % 別忘了這句,要不然總是一個點(diǎn)
end
% 繪制第二個簇的氣泡圖
for i=1:length(index2)
scatter(fcmdata(index2(i),1),fcmdata(index2(i),2),weight(index2(i)),...
'MarkerEdgeColor','k','MarkerEdgeAlpha',0,'MarkerFaceColor','b',...
'MarkerFaceAlpha',0.3);
hold on % 別忘了這句,要不然總是一個點(diǎn)
end
plot(centers(:,1),centers(:,2),'xk','markersize',10,'linewidth',3);
hold off
最終繪制效果如下圖所示:
氣泡的大小代表每個樣本的奴屬度(C)但可以看出大部分氣泡大小差距不大,只有在兩分類交界處出現(xiàn)奴屬度較小的氣泡,這是符合實(shí)施規(guī)律的。事實(shí)上,圖中氣泡的大小差距是經(jīng)過放大處理的,若不經(jīng)歷此步操作,氣泡的大小是差不多的。
三維氣泡圖的繪制
原理同二維氣泡圖一樣,直接上代碼。
% 使用這個腳本創(chuàng)建三維氣泡圖
clc
clear
%% 數(shù)據(jù)集的創(chuàng)建
rng default; % For reproducibility
X = [randn(20,3)*0.75+ones(20,3);randn(20,3)*0.5-ones(20,3)]; % 創(chuàng)建20個樣本的二分類數(shù)據(jù)集
%% 進(jìn)行模糊c均值聚類
Numclust = 2;
[centers,U] = fcm(X,Numclust);
index1 = find(U(1,:)==max(U)); % 獲取簇1的標(biāo)號
index2 = find(U(2,:)==max(U)); % 獲取簇2的標(biāo)號
weight = normalize(max(U),'range')*800; % 獲取氣泡權(quán)重
weight(weight==0) = (1/20)*mean(weight); % 調(diào)好看一點(diǎn)
%% 繪制3維氣泡圖
figure
for i = 1:length(index1)
scatter3(X(index1(i),1),X(index1(i),2),X(index1(i),3),weight(index1(i)),...
'MarkerEdgeColor','k','MarkerEdgeAlpha',0,'MarkerFaceColor','r',...
'MarkerFaceAlpha',0.3);
hold on
end
for i = 1:length(index2)
scatter3(X(index2(i),1),X(index2(i),2),X(index2(i),3),weight(index2(i)),...
'MarkerEdgeColor','k','MarkerEdgeAlpha',0,'MarkerFaceColor','b',...
'MarkerFaceAlpha',0.3);
hold on
end
plot3(centers(:,1),centers(:,2),centers(:,3),'xk','markersize',10,'linewidth',3);
hold off
最終繪制效果圖如下圖所示:
后續(xù)
冷靜下來想了想,將c值以氣泡圖形式表示出來似乎有點(diǎn)畫蛇添足,不過作為日常編程練習(xí)還是有幫助的。matlab入門小白,歡迎大家多多指教!
總結(jié)
以上是生活随笔為你收集整理的matlab 泡泡图,使用matlab绘制2维、3维气泡图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5触边反弹,第四章课件.PPT_
- 下一篇: ddhelper32.exe进程安全吗.