點(diǎn)擊上方藍(lán)字和“好玩的MATLAB”一起快樂(lè)玩耍吧!
dmy3zec1zgz6408503341.jpg (236.67 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
dmy3zec1zgz6408503341.jpg
2024-9-16 17:22 上傳
好玩的matlab
帶你解鎖不一樣的matlab新玩法
前面幾篇推文詳細(xì)的介紹了散點(diǎn)圖和邊際圖的畫(huà)法【MATLAB|回歸曲線(xiàn)|置信區(qū)間|邊際圖|核密度填充圖、MATLAB|聚類(lèi)散點(diǎn)圖|邊際圖|核密度填充圖】,今天特意添加邊際直方圖的畫(huà)法,喜歡此推文的小伙伴們記得點(diǎn)贊+關(guān)注+分享!【尊重作者勞動(dòng)成果,轉(zhuǎn)載請(qǐng)注明推文鏈接和公眾號(hào)名】
效果效果圖圖
邊際直方圖效果圖
15gwqsduvst6408503442.png (106.07 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
15gwqsduvst6408503442.png
2024-9-16 17:22 上傳
uzeheosratj6408503542.gif (257.84 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
uzeheosratj6408503542.gif
2024-9-16 17:22 上傳
繪圖工具函數(shù)classdef PlotDensHist %-------------------------------------------------------------------------- % @Author: 好玩的Matlab % @公眾號(hào):好玩的Matlab % @Created: 09,06,2023 % @Email:2377389590@qq.com % 尊重勞動(dòng)成果,轉(zhuǎn)載請(qǐng)備注推文鏈接和公眾號(hào)名。 % @Disclaimer: This code is provided as-is without any warranty. %-------------------------------------------------------------------------- properties XData; % x數(shù)據(jù) YData; % y數(shù)據(jù) FillColor; % 填充顏色 FaceAlpha; % 透明度數(shù) HFig; % 圖形句柄 end methods function obj = PlotDensHist(sHdl) % 設(shè)置默認(rèn)參數(shù) obj.XData = get(sHdl, 'XData'); obj.YData = get(sHdl, 'YData'); obj.FillColor = get(sHdl, 'CData'); obj.FaceAlpha = get(sHdl, 'MarkerFaceAlpha') * 0.4;
obj.HFig = gcf; end function plotDensHist(obj) hFig = obj.HFig; % 獲取當(dāng)前figure的句柄 axesPositions = {[0.07, 0.07, 0.65, 0.65],... % 主圖 [0.07, 0.07, 0.65, 0.65],... % 與主圖重合 [0.07, 0.74, 0.65, 0.2],... % 頂部區(qū)域 [0.74, 0.07, 0.2, 0.65]}; % 右側(cè)區(qū)域 axObj = findall(hFig, 'Type', 'axes'); hFig.Position = [439 76 891 790]; axesCount = length(axObj); if axesCount == 1 ax = gca; ax.Box = 'on'; ax.Position = axesPositions{1}; topAxes = axes('position', axesPositions{3}); rightAxes = axes('position', axesPositions{4}); end % 遍歷所有 Axes 對(duì)象 for i = 1:length(axObj) ax = axObj(i); % 獲取當(dāng)前 Axes 對(duì)象 pos = get(ax, 'Position'); % 獲取當(dāng)前 Axes 對(duì)象的 Position 屬性
% 檢查 Position 是否匹配 if sum(abs(pos - axesPositions{1})) 1e-6 mainAxes = ax; elseif sum(abs(pos - axesPositions{3})) 1e-6 topAxes = ax; elseif sum(abs(pos - axesPositions{4})) 1e-6 rightAxes = ax; end end xi = obj.XData; yi = obj.YData; nbins = round(length(xi) / 4); % 這里繪制到topAxes if ~isempty(topAxes) axes(topAxes); hold on; histogram(topAxes, xi, nbins, 'FaceColor', obj.FillColor, ... 'EdgeColor', obj.FillColor, 'FaceAlpha', obj.FaceAlpha, 'LineWidth', 0.5) topAxes.YDir = 'normal'; topAxes.XMinorTick = 'on'; topAxes.YMinorTick = 'on'; topAxes.TickDir = 'out'; topAxes.TickLength = [.011 .01]; topAxes.XTickLabel = {}; topAxes.Visible = 'on'; topAxes.Box = 'off'; topAxes.LineWidth = 1.2; topAxes.FontSize = 18; topAxes.FontName = 'Times New Roman'; topAxes.XLim = ax.XLim; topAxes.Box = 'off'; end
% 這里繪制到rightAxes if ~isempty(rightAxes) axes(rightAxes); hold on; histogram(rightAxes, yi, nbins, 'FaceColor', obj.FillColor, 'Orientation', 'horizontal', ... 'EdgeColor', obj.FillColor, 'FaceAlpha', obj.FaceAlpha, 'LineWidth', 0.5) rightAxes.YDir = 'normal'; rightAxes.XMinorTick = 'on'; rightAxes.YMinorTick = 'on'; rightAxes.TickDir = 'out'; rightAxes.TickLength = [.011 .01]; rightAxes.YTickLabel = {}; rightAxes.Visible = 'on'; rightAxes.Box = 'off'; rightAxes.LineWidth = 1.2; rightAxes.FontSize = 18; rightAxes.FontName = 'Times New Roman'; rightAxes.XLim = topAxes.YLim; rightAxes.YLim = ax.YLim; rightAxes.Box = 'off'; end % 綁定X Y linkaxes([mainAxes, rightAxes], 'y') linkaxes([mainAxes, topAxes], 'x') end endend這個(gè)函數(shù)定義了PlotDensHist的MATLAB類(lèi),用于創(chuàng)建一個(gè)帶有附加邊際分布信息的直方圖圖形。以下是對(duì)該函數(shù)的分析和介紹:類(lèi)屬性:
XData:存儲(chǔ)主圖中的X軸數(shù)據(jù)。
YData:存儲(chǔ)主圖中的Y軸數(shù)據(jù)。
FillColor:存儲(chǔ)直方圖的填充顏色。
FaceAlpha:存儲(chǔ)填充區(qū)域的透明度。
HFig:存儲(chǔ)圖形句柄。
ge21ffevlt36408503642.png (41.02 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
ge21ffevlt36408503642.png
2024-9-16 17:22 上傳
根據(jù)句柄的形式調(diào)用。
構(gòu)造函數(shù) PlotDensHist(sHdl):
該構(gòu)造函數(shù)接受一個(gè)圖形句柄 sHdl 作為輸入?yún)?shù),并從該圖形句柄中提取相關(guān)屬性值,以初始化對(duì)象的屬性。這些屬性包括X軸數(shù)據(jù)、Y軸數(shù)據(jù)、填充顏色、線(xiàn)條顏色等。
構(gòu)造函數(shù)將這些屬性存儲(chǔ)在對(duì)象的屬性中,并設(shè)置默認(rèn)的繪圖參數(shù)。
plotDensHist 方法:
plotDensHist 方法用于在MATLAB圖形中創(chuàng)建直方圖,并添加附加的邊際分布信息。
該方法首先獲取當(dāng)前圖形的句柄 hFig,然后創(chuàng)建主圖、頂部區(qū)域和右側(cè)區(qū)域的坐標(biāo)軸位置。
主圖的數(shù)據(jù)來(lái)自對(duì)象的屬性 XData 和 YData,并根據(jù)對(duì)象的其他屬性(如填充顏色、線(xiàn)條顏色等)來(lái)繪制直方圖。
頂部和右側(cè)區(qū)域分別用于繪制邊際分布的直方圖,使用的數(shù)據(jù)分別是 XData 和 YData。
方法還設(shè)置了坐標(biāo)軸的各種屬性,如刻度線(xiàn)樣式、字體大小等。
最后,通過(guò) linkaxes 方法將主圖和邊際分布區(qū)域的坐標(biāo)軸連接在一起,以確保它們?cè)诳s放時(shí)保持一致。
[/ol]案例clc;clear;close all;d1=repmat([2 2],100,1) + randn(100,2)*[1 .5; 0 1.32];d2=repmat([9 1],100,1) + randn(100,2)*[1.4 0.2; 0 0.98];d3=repmat([6 8],100,1) + randn(100,2)*[1 0.5; 0 1];
% 使用scatter函數(shù)繪制散點(diǎn)圖hold onsh1=scatter(d1(:,1), d1(:,2),'filled','CData',[0,0,1],'MarkerFaceAlpha',0.5,'MarkerEdgeColor','none','Marker','o');sh2=scatter(d2(:,1), d2(:,2),'filled','CData',[0,1,0],'MarkerFaceAlpha',0.5,'MarkerEdgeColor','none','Marker','^');sh3=scatter(d3(:,1), d3(:,2),'filled','CData',[1,0.6471,0],'MarkerFaceAlpha',0.5,'MarkerEdgeColor','none','Marker','s');
% 畫(huà)出凸包k1 = convhull(d1(:,1), d1(:,2));k2 = convhull(d2(:,1), d2(:,2));k3 = convhull(d3(:,1), d3(:,2));line(d1(k1,1), d1(k1,2), 'Color', [0 0 1],'LineWidth',1.2)line(d2(k2,1), d2(k2,2), 'Color', [0,1,0],'LineWidth',1.2)line(d3(k3,1), d3(k3,2), 'Color', [1,0.6471,0],'LineWidth',1.2)legend('demo1','demo2','demo3','box','off','Location','best')% 設(shè)置標(biāo)簽和標(biāo)題ax=gca;box onax.XLim=[-2,15];ax.YLim=[-4,13];ax.XLabel.String='X';ax.YLabel.String='Y';ax.Title.String='';
ax.GridLineStyle = '-.'; % 設(shè)置網(wǎng)格線(xiàn)樣式為虛線(xiàn)ax.GridColor = 'k'; % 設(shè)置網(wǎng)格線(xiàn)顏色為紅色ax.XGrid = 'off'; % 關(guān)閉X網(wǎng)格線(xiàn)ax.YGrid = 'off'; % 打開(kāi)Y網(wǎng)格線(xiàn)
ax.LineWidth = 1; % 設(shè)置坐標(biāo)線(xiàn)寬ax.XMinorTick = 'on'; % 打開(kāi)x次要刻度線(xiàn)ax.YMinorTick = 'on'; % 打開(kāi)y次要刻度線(xiàn)ax.TickDir = 'out'; % 設(shè)置刻度線(xiàn)方向向外ax.FontSize = 14; % 設(shè)置坐標(biāo)字體大小
Phdl1=PlotDensHist(sh1);Phdl1.plotDensHist();Phdl2=PlotDensHist(sh2);Phdl2.plotDensHist();Phdl3=PlotDensHist(sh3);Phdl3.plotDensHist();
h23etwwj4u36408503742.png (74.86 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
h23etwwj4u36408503742.png
2024-9-16 17:22 上傳
- -THE END- -
源碼下載:gitee下載:https://gitee.com/iDMatlab/cool-scatter-chart
suyly3d4sgy6408503842.png (24.6 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
suyly3d4sgy6408503842.png
2024-9-16 17:22 上傳
參考資料:
【1】MATLAB|炫酷的聚類(lèi)散點(diǎn)圖【2】MATLAB|聚類(lèi)散點(diǎn)圖|邊際圖|核密度填充圖【3】MATLAB|回歸曲線(xiàn)|置信區(qū)間|邊際圖|核密度填充圖
fpypcza3uyc6408503942.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
fpypcza3uyc6408503942.gif
2024-9-16 17:22 上傳
zgwedgejjrx6408504042.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
zgwedgejjrx6408504042.png
2024-9-16 17:22 上傳
送書(shū)活動(dòng)
ga5vmauqqfi6408504142.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ga5vmauqqfi6408504142.png
2024-9-16 17:22 上傳
rrnifaegv5r6408504242.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
rrnifaegv5r6408504242.gif
2024-9-16 17:22 上傳
包郵贈(zèng)送 「北京大學(xué)出版社」贊助《MATLAB科學(xué)計(jì)算從入門(mén)到精通》
本書(shū)從 MATLAB 基礎(chǔ)語(yǔ)法講起,介紹了基于 MATLAB 函數(shù)的科學(xué)計(jì)算問(wèn)題求解方法,實(shí)現(xiàn)了大量科學(xué)計(jì)算算法。
本書(shū)分為三大部分。第 1 章和第 2 章為 MATLAB 的基礎(chǔ)知識(shí),對(duì)全書(shū)用到的 MATLAB 基礎(chǔ)進(jìn)行了簡(jiǎn)單介紹。第 3 ~ 12 章為本書(shū)的核心部分,包括線(xiàn)性方程組求解、非線(xiàn)性方程求解、數(shù)值優(yōu)化、數(shù)據(jù)插值、數(shù)據(jù)擬合與回歸分析、數(shù)值積分、常微分方程求解、偏微分方程求解、概率統(tǒng)計(jì)計(jì)算及圖像處理與信號(hào)處理等內(nèi)容。第 13 ~ 15 章為實(shí)戰(zhàn)部分,以實(shí)際生活中的數(shù)學(xué)問(wèn)題為例,將前文介紹的各類(lèi)科學(xué)計(jì)算算法應(yīng)用其中。本書(shū)內(nèi)容全面、通俗易懂,適合有一定 MATLAB 基礎(chǔ)、想要進(jìn)行進(jìn)階學(xué)習(xí)的讀者。
了解更多
▼▼▼
xdnynufy5306408504343.jpg (1.86 MB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
xdnynufy5306408504343.jpg
2024-9-16 17:22 上傳
【抽獎(jiǎng)方式及滿(mǎn)足條件】:
1.關(guān)注「好玩的MATLAB 」公眾號(hào)和視頻號(hào)
xbbouvyiy1r6408504443.jpg (183.22 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
xbbouvyiy1r6408504443.jpg
2024-9-16 17:22 上傳
2.給本文點(diǎn)【贊】+【在看】;
3.留言區(qū)評(píng)論點(diǎn)贊最多的前3名。
4.本活動(dòng)只針對(duì)從未獲過(guò)獎(jiǎng)的同學(xué),之前獲過(guò)獎(jiǎng)的小伙伴,不用參加。
同時(shí)滿(mǎn)足上述4個(gè)條件的讀者朋友,包郵贈(zèng)送一本
【開(kāi)獎(jiǎng)時(shí)間】:2023年10月10日夜晚8點(diǎn)
【領(lǐng)獎(jiǎng)方式】:在開(kāi)獎(jiǎng)時(shí)加小編私人微信:idmatlab
掃一掃加管理員微信
vu5taa4qpvi6408504543.png (3.14 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
vu5taa4qpvi6408504543.png
2024-9-16 17:22 上傳
svoennfzq1r6408504643.jpg (71.27 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
svoennfzq1r6408504643.jpg
2024-9-16 17:22 上傳
|