中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Matlab怎么繪制小提琴圖

發布時間:2022-05-16 17:03:50 來源:億速云 閱讀:335 作者:iii 欄目:開發技術

今天小編給大家分享一下基于Matlab怎么繪制小提琴圖的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

基于Matlab怎么繪制小提琴圖

violinChart 函數使用方法

寫了個matlab繪制小提琴圖的函數:

基于Matlab怎么繪制小提琴圖

1.圖中小提琴狀區域為核密度曲線。

2.白色方塊為25%,75%分位數。

3.中間橫線為中位數。

4.白色點為離群值點。

5.豎著的黑線是去掉離群值點后點的上下限。

基礎使用,Y為矩陣

X=1:5;
Y=randn(100,5);

violinChart(gca,X,Y,[0 0.447 0.741],0.6);

基于Matlab怎么繪制小提琴圖

  • X | 橫坐標。

  • Y | 數據集。

  • FaceColor | 顏色,示例用的是[0 0.447 0.741]。

  • width | 小提琴圖寬度,這里取的是0.6,就是以兩個小提琴圖間距的0.6倍為概率密度的上限1。

基礎使用,Y為向量,X為標簽

X=[1.*ones(1,50),2.*ones(1,30),3.*ones(1,20),4.*ones(1,50),5.*ones(1,50)];
Y=randn(1,200)+sin(X);

violinChart(gca,X,Y,[0 0.447 0.741]);

基于Matlab怎么繪制小提琴圖

基礎使用,多個圖像繪制,并添加圖例

X1=[1:2:7,13];
Y1=randn(100,5)+sin(X1);
X2=2:2:10;
Y2=randn(100,5)+cos(X2);

figure
Hdl1=violinChart(gca,X1,Y1,[0     0.447 0.741]);
Hdl2=violinChart(gca,X2,Y2,[0.850 0.325 0.098]);
legend([Hdl1.F_legend,Hdl2.F_legend],{'randn+sin(x)','randn+cos(x)'});

基于Matlab怎么繪制小提琴圖

violinChart 完整函數

若函數有更新則會將更新版本放入文末所示壓縮文件內。

function Hdl=violinChart(ax,X,Y,FaceColor,width)
% @author slandarer
% Hdl: 返回的圖形對象句柄結構體
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Hdl.F_density(i)   | patch   | 核密度分布
% Hdl.F_outlier(i)   | scatter | 離群值點
% Hdl.F_range95(i)   | line    | 去除離群值點后最大值及最小值
% Hdl.F_quantile(i)  | patch   | 四分位數框
% Hdl.F_medianLine(i)| line    | 中位數
%
% Hdl.F_legend       | patch   | 用于生成legend圖例的圖形對象
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% 請使用如下方式生成圖例:
% Hdl1=violinChart(ax,X,Y,... ...)
% Hdl2=violinChart(ax,X,Y,... ...)
% ... ...
% legend([Hdl1,Hdl2,... ...],{Name1,Name2,...})
% ===========================================================
% 以下為使用實例代碼:
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% X1=[1:2:7,13];
% Y1=randn(100,5)+sin(X1);
% X2=2:2:10;
% Y2=randn(100,5)+cos(X2);
% 
% Hdl1=violinChart(gca,X1,Y1,[0     0.447 0.741],0.5);
% Hdl2=violinChart(gca,X2,Y2,[0.850 0.325 0.098],0.5);
% legend([Hdl1.F_legend,Hdl2.F_legend],{'randn+sin(x)','randn+cos(x)'});

if nargin<5
    width=0.4;
end

if ~isempty(ax)
else
    ax=gca;
end
hold(ax,'on');

oriX=X;
X=unique(X);
sep=min(diff(X));
if isempty(sep)
    sep=1;
end
for i=1:length(X)
    if length(oriX)==numel(Y)
        tY=Y(oriX==X(i));
    else
        tY=Y(:,i);
    end
    [f,yi]=ksdensity(tY);
    Hdl.F_density(i)=fill([f,-f(end:-1:1)].*sep.*width+X(i),[yi,yi(end:-1:1)],FaceColor);
    
    outliBool=isoutlier(tY,'quartiles');
    outli=tY(outliBool);
    Hdl.F_outlier(i)=scatter(repmat(X(i),[length(outli),1]),outli,20,'filled',...
                    'CData',[1 1 1],'MarkerEdgeColor','none');
    nY=tY(~outliBool);
    Hdl.F_range95(i)=plot([X(i),X(i)],[min(nY),max(nY)],'k','lineWidth',1);
    
    qt25=quantile(tY,0.25);
    qt75=quantile(tY,0.75);
    
    Hdl.F_quantile(i)=fill(X(i)+0.6.*sep.*width.*[-1 1 1 -1].*max(f),...
                    [qt25,qt25,qt75,qt75],[1 1 1],...
                    'EdgeColor',[0 0 0]);
                
    med=median(tY);
    Hdl.F_medianLine(i)=plot(X(i)+0.6.*sep.*width.*[-1 1].*max(f),[med,med],'LineWidth',3,...
                    'Color',[0 0 0]);
end

Hdl.F_legend=Hdl.F_density(1);
end

ggtheme violin 函數介紹

假設你已經編寫了上述繪圖代碼,只需要將最后增添一行變為

X1=[1:2:7,13];
Y1=randn(100,5)+sin(X1);
X2=2:2:10;
Y2=randn(100,5)+cos(X2);

figure
Hdl1=violinChart(gca,X1,Y1,[0     0.447 0.741]);
Hdl2=violinChart(gca,X2,Y2,[0.850 0.325 0.098]);
legend([Hdl1.F_legend,Hdl2.F_legend],{'randn+sin(x)','randn+cos(x)'});

ggThemeViolin(gca,[Hdl1,Hdl2],'dust');

則圖像會被修飾:

基于Matlab怎么繪制小提琴圖

而將函數最后加入&lsquo;LP&rsquo;參數則變為:

ggThemeViolin(gca,[Hdl1,Hdl2],'dust','LP');

基于Matlab怎么繪制小提琴圖

ggtheme violin 主題

主題有如下選擇:

'flat'/'flat_dark'/'camouflage'/'chalk'/
'copper'/'dust'/'earth'/'fresh'/'grape'/
'grass'/'greyscale'/'light'/'lilac'/'pale'/
'sea'/'sky'/'solarized'

'flat'

基于Matlab怎么繪制小提琴圖

'flat_dark'

基于Matlab怎么繪制小提琴圖

'camouflage'

基于Matlab怎么繪制小提琴圖

'chalk'

基于Matlab怎么繪制小提琴圖

'copper'

基于Matlab怎么繪制小提琴圖

'dust'

基于Matlab怎么繪制小提琴圖

'earth'

基于Matlab怎么繪制小提琴圖

'fresh'

基于Matlab怎么繪制小提琴圖

'grape'

基于Matlab怎么繪制小提琴圖

'grass'

基于Matlab怎么繪制小提琴圖

'greyscale'

基于Matlab怎么繪制小提琴圖

'light'

基于Matlab怎么繪制小提琴圖

'lilac'

基于Matlab怎么繪制小提琴圖

'pale'

基于Matlab怎么繪制小提琴圖

'sea'

基于Matlab怎么繪制小提琴圖

'sky'

基于Matlab怎么繪制小提琴圖

'solarized'

基于Matlab怎么繪制小提琴圖

ggtheme violin 修飾函數代碼

注意,要使用ggThemeViolin修飾器函數,需要保證當前文件夾有themeCSS.mat文件,該文件將會一同在壓縮包內給出。

function ax=ggThemeViolin(varargin)
% @author:slandarer
% 
% 參數說明:
% -----------------------------------------------------
% AxesTheme   | 坐標區域風格       | 'flat'/'flat_dark'/'camouflage'/'chalk'/
%                                    'copper'/'dust'/'earth'/'fresh'/'grape'/
%                                    'grass'/'greyscale'/'light'/'lilac'/'pale'
%                                    'sea'/'sky'/'solarized'
%
% HDLset      | 句柄集合    

% 獲取要處理的坐標區域=====================================================
if strcmp(get(varargin{1},'type'),'axes' )
    ax=varargin{1};
else
    ax=gca;
end
hold(ax,'on')

% 獲取要處理的圖像句柄=====================================================
HDLset=varargin{2};

% 獲取風格名稱=============================================================
theme.AxesTheme='flat';
if length(varargin)>2
    theme.AxesTheme=varargin{3};
end

% 開始風格化===============================================================
ax.Box='off';
ax.YGrid='on';
ax.XGrid='on';
ax.GridLineStyle='--';
ax.LineWidth=1.2;

% 主題風格化
Tm=load('themeCSS.mat');
Tm=Tm.theme;
ax.Color=Tm.(theme.AxesTheme).Color;
ax.TickLength=Tm.(theme.AxesTheme).TickLength;
ax.GridColorMode=Tm.(theme.AxesTheme).GridColorMode;
ax.GridColor=Tm.(theme.AxesTheme).GridColor;
ax.GridAlpha=Tm.(theme.AxesTheme).GridAlpha;
ax.XColor=Tm.(theme.AxesTheme).XColor;
ax.YColor=Tm.(theme.AxesTheme).YColor;
ax.TickDir=Tm.(theme.AxesTheme).TickDir;
ax.ColorOrder=Tm.(theme.AxesTheme).ColorOrder;

for i=1:length(HDLset)
    for j=1:length(HDLset(i).F_density)
        HDLset(i).F_density(j).FaceColor=ax.ColorOrder(mod(i-1,size(ax.ColorOrder,1))+1,:);
        HDLset(i).F_density(j).EdgeColor=[.1,.1,.1];
        
        f_max=(max(HDLset(i).F_density(j).XData)-min(HDLset(i).F_density(j).XData))/2;
        x_mid=(max(HDLset(i).F_density(j).XData)+min(HDLset(i).F_density(j).XData))/2;
        HDLset(i).F_quantile(j).XData=x_mid+0.4.*f_max.*[-1 1 1 -1];
        HDLset(i).F_quantile(j).FaceColor=[1 1 1].*0.95;
        
        HDLset(i).F_medianLine(j).XData=x_mid+0.4.*f_max.*[-1 1];
        HDLset(i).F_medianLine(j).LineWidth=2;
        HDLset(i).F_medianLine(j).Color=[0.3,0.3,0.3];
        
        HDLset(i).F_outlier(j).CData=Tm.(theme.AxesTheme).EdgeColor;
    end
    
end

if ~isempty(ax.Legend)
    ax.Legend.Box='off';
    ax.Legend.FontSize=12;
    if mean(ax.Color)>0.6
        ax.Legend.TextColor=ax.XColor;
    else
        ax.Legend.TextColor=[0.9 0.9 0.9];
    end
    if ~isempty(regexpi(ax.Legend.Location,'out', 'once'))
        ax.Legend.TextColor=ax.XColor;
        ax.Legend.Title.FontSize=14;
    end
    ax.Legend.AutoUpdate='off';
end

end

以上就是“基于Matlab怎么繪制小提琴圖”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河南省| 嵊州市| 梁山县| 图木舒克市| 如东县| 吴桥县| 中宁县| 武定县| 南陵县| 三穗县| 德惠市| 台山市| 黑水县| 稷山县| 卓资县| 卫辉市| 犍为县| 孟村| 伊宁市| 五大连池市| 阿坝县| 乐至县| 渭南市| 嘉黎县| 丹巴县| 万年县| 荆门市| 阜新市| 久治县| 西安市| 镇平县| 迁西县| 同仁县| 建湖县| 澳门| 贡山| 察哈| 仙游县| 大兴区| 高要市| 辽中县|