|
點擊上方藍字和“好玩的MATLAB”一起快樂玩耍吧!
2aiihgdyunq6403003606.jpg (236.67 KB, 下載次數(shù): 0)
下載附件
保存到相冊
2aiihgdyunq6403003606.jpg
2024-9-3 17:21 上傳
好玩的matlab
帶你解鎖不一樣的matlab新玩法
前面幾篇推文詳細的介紹了散點圖和邊際圖的畫法【MATLAB|回歸曲線|置信區(qū)間|邊際圖|核密度填充圖、MATLAB|聚類散點圖|邊際圖|核密度填充圖】,今天特意添加邊際直方圖的畫法,喜歡此推文的小伙伴們記得點贊+關(guān)注+分享!【尊重作者勞動成果,轉(zhuǎn)載請注明推文鏈接和公眾號名】
效果效果圖圖
邊際直方圖效果圖
bqzszlsvkpr6403003706.png (106.07 KB, 下載次數(shù): 0)
下載附件
保存到相冊
bqzszlsvkpr6403003706.png
2024-9-3 17:21 上傳
f4lae4sbzyk6403003806.gif (257.84 KB, 下載次數(shù): 0)
下載附件
保存到相冊
f4lae4sbzyk6403003806.gif
2024-9-3 17:21 上傳
繪圖工具函數(shù)classdef PlotDensHist %-------------------------------------------------------------------------- % @Author: 好玩的Matlab % @公眾號:好玩的Matlab % @Created: 09,06,2023 % @Email:2377389590@qq.com % 尊重勞動成果,轉(zhuǎn)載請備注推文鏈接和公眾號名。 % @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è)置默認參數(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; % 獲取當前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 對象 for i = 1:length(axObj) ax = axObj(i); % 獲取當前 Axes 對象 pos = get(ax, 'Position'); % 獲取當前 Axes 對象的 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這個函數(shù)定義了PlotDensHist的MATLAB類,用于創(chuàng)建一個帶有附加邊際分布信息的直方圖圖形。以下是對該函數(shù)的分析和介紹:類屬性:
XData:存儲主圖中的X軸數(shù)據(jù)。
YData:存儲主圖中的Y軸數(shù)據(jù)。
FillColor:存儲直方圖的填充顏色。
FaceAlpha:存儲填充區(qū)域的透明度。
HFig:存儲圖形句柄。
r25nanmc03x6403003906.png (41.02 KB, 下載次數(shù): 0)
下載附件
保存到相冊
r25nanmc03x6403003906.png
2024-9-3 17:21 上傳
根據(jù)句柄的形式調(diào)用。
構(gòu)造函數(shù) PlotDensHist(sHdl):
該構(gòu)造函數(shù)接受一個圖形句柄 sHdl 作為輸入?yún)?shù),并從該圖形句柄中提取相關(guān)屬性值,以初始化對象的屬性。這些屬性包括X軸數(shù)據(jù)、Y軸數(shù)據(jù)、填充顏色、線條顏色等。
構(gòu)造函數(shù)將這些屬性存儲在對象的屬性中,并設(shè)置默認的繪圖參數(shù)。
plotDensHist 方法:
plotDensHist 方法用于在MATLAB圖形中創(chuàng)建直方圖,并添加附加的邊際分布信息。
該方法首先獲取當前圖形的句柄 hFig,然后創(chuàng)建主圖、頂部區(qū)域和右側(cè)區(qū)域的坐標軸位置。
主圖的數(shù)據(jù)來自對象的屬性 XData 和 YData,并根據(jù)對象的其他屬性(如填充顏色、線條顏色等)來繪制直方圖。
頂部和右側(cè)區(qū)域分別用于繪制邊際分布的直方圖,使用的數(shù)據(jù)分別是 XData 和 YData。
方法還設(shè)置了坐標軸的各種屬性,如刻度線樣式、字體大小等。
最后,通過 linkaxes 方法將主圖和邊際分布區(qū)域的坐標軸連接在一起,以確保它們在縮放時保持一致。
[/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ù)繪制散點圖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');
% 畫出凸包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è)置標簽和標題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)格線樣式為虛線ax.GridColor = 'k'; % 設(shè)置網(wǎng)格線顏色為紅色ax.XGrid = 'off'; % 關(guān)閉X網(wǎng)格線ax.YGrid = 'off'; % 打開Y網(wǎng)格線
ax.LineWidth = 1; % 設(shè)置坐標線寬ax.XMinorTick = 'on'; % 打開x次要刻度線ax.YMinorTick = 'on'; % 打開y次要刻度線ax.TickDir = 'out'; % 設(shè)置刻度線方向向外ax.FontSize = 14; % 設(shè)置坐標字體大小
Phdl1=PlotDensHist(sh1);Phdl1.plotDensHist();Phdl2=PlotDensHist(sh2);Phdl2.plotDensHist();Phdl3=PlotDensHist(sh3);Phdl3.plotDensHist();
gil2ybecvcz6403004006.png (74.86 KB, 下載次數(shù): 0)
下載附件
保存到相冊
gil2ybecvcz6403004006.png
2024-9-3 17:21 上傳
- -THE END- -
源碼下載:gitee下載:https://gitee.com/iDMatlab/cool-scatter-chart
vm5jihjpdrq6403004107.png (24.6 KB, 下載次數(shù): 0)
下載附件
保存到相冊
vm5jihjpdrq6403004107.png
2024-9-3 17:21 上傳
參考資料:
【1】MATLAB|炫酷的聚類散點圖【2】MATLAB|聚類散點圖|邊際圖|核密度填充圖【3】MATLAB|回歸曲線|置信區(qū)間|邊際圖|核密度填充圖
zgqmb5md3on6403004207.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊
zgqmb5md3on6403004207.gif
2024-9-3 17:21 上傳
oq4ly2d2gno6403004307.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊
oq4ly2d2gno6403004307.png
2024-9-3 17:21 上傳
送書活動
beuc4otendf6403004407.png (696 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊
beuc4otendf6403004407.png
2024-9-3 17:21 上傳
bf1bhclec4d6403004507.gif (10.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊
bf1bhclec4d6403004507.gif
2024-9-3 17:21 上傳
包郵贈送 「北京大學出版社」贊助《MATLAB科學計算從入門到精通》
本書從 MATLAB 基礎(chǔ)語法講起,介紹了基于 MATLAB 函數(shù)的科學計算問題求解方法,實現(xiàn)了大量科學計算算法。
本書分為三大部分。第 1 章和第 2 章為 MATLAB 的基礎(chǔ)知識,對全書用到的 MATLAB 基礎(chǔ)進行了簡單介紹。第 3 ~ 12 章為本書的核心部分,包括線性方程組求解、非線性方程求解、數(shù)值優(yōu)化、數(shù)據(jù)插值、數(shù)據(jù)擬合與回歸分析、數(shù)值積分、常微分方程求解、偏微分方程求解、概率統(tǒng)計計算及圖像處理與信號處理等內(nèi)容。第 13 ~ 15 章為實戰(zhàn)部分,以實際生活中的數(shù)學問題為例,將前文介紹的各類科學計算算法應用其中。本書內(nèi)容全面、通俗易懂,適合有一定 MATLAB 基礎(chǔ)、想要進行進階學習的讀者。
了解更多
▼▼▼
3nk2gzxw2rm6403004607.jpg (1.86 MB, 下載次數(shù): 0)
下載附件
保存到相冊
3nk2gzxw2rm6403004607.jpg
2024-9-3 17:21 上傳
【抽獎方式及滿足條件】:
1.關(guān)注「好玩的MATLAB 」公眾號和視頻號
cffsd5fjw5q6403004707.jpg (183.22 KB, 下載次數(shù): 0)
下載附件
保存到相冊
cffsd5fjw5q6403004707.jpg
2024-9-3 17:21 上傳
2.給本文點【贊】+【在看】;
3.留言區(qū)評論點贊最多的前3名。
4.本活動只針對從未獲過獎的同學,之前獲過獎的小伙伴,不用參加。
同時滿足上述4個條件的讀者朋友,包郵贈送一本
【開獎時間】:2023年10月10日夜晚8點
【領(lǐng)獎方式】:在開獎時加小編私人微信:idmatlab
掃一掃加管理員微信
on3q2tatior6403004807.png (3.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
on3q2tatior6403004807.png
2024-9-3 17:21 上傳
gx15pxjc5gt6403004907.jpg (71.27 KB, 下載次數(shù): 0)
下載附件
保存到相冊
gx15pxjc5gt6403004907.jpg
2024-9-3 17:21 上傳
|
|