详解Matlab如何绘制小提琴图
目录
1使用示例基础使用,Y为矩阵基础使用,Y为向量,X为标签基础使用多个图像绘制,并添加图例2完整代码写了个matlab绘制小提琴图的函数:
1.图中小提琴状区域为核密度曲线
2.白色方块为25%,75%分位数
3.中间横线为中位数
4.白色点为离群值点
5.竖着的黑线是去掉离群值点后点的上下限
1使用示例
基础使用,Y为矩阵
X=1:5; Y=randn(100,5); Hdl1=violinChart(gca,X,Y,[0 0.447 0.741],0.6);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); Hdl=violinChart(gca,X,Y,[0 0.447 0.741]);
基础使用多个图像绘制,并添加图例
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)"});
2完整代码
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
以上就是详解Matlab如何绘制小提琴图的详细内容,更多关于Matlab小提琴图的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?