详解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小提琴图的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python调用Matplotlib绘制振动图、箱型图和提琴图

    目录 Matplotlib介绍 振动图 箱型图 提琴图 Matplotlib介绍 Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy  ndarray 数组来绘制 2D 图像,它使用简单.代码清晰易懂,深受广大技术爱好者喜爱. NumPy 是 Python 科学计算的软件包,ndarray 则是 NumPy 提供的一种数组结构. Matplotlib 由 John D. Hunter 在 2002 年开始编写, 2003 年 Matplot

  • Matlab使用fft画出信号频谱图的方法

    做雷原作业,需要对信号进行频谱分析,网上一搜太乱了,很多不是我想要的,特此整理. DSP还没学到fft,就不对fft原理进行详细解释了,直接上代码. fs=500;%采样率 f1=5;%信号频率 f2=10;%信号频率 T=1;%时宽1s n=round(T*fs);%采样点个数 t=linspace(0,T,n);%时域横坐标 x = 3+cos(2*pi*f1*t) + 2.*cos(2*pi*f2*t);%形成三频信号,注意第二个频率信号幅度为2,直流幅度为3 figure(1); plo

  • 利用Python Matlab绘制曲线图的简单实例

    目录 一.简介 二.绘制图形 1.第一个曲线图 2.第二个图形 3.第三个图形 4.第四个图形 5.画出指定区间的一个多项式函数: 总结 一.简介 我们在这里采用Python中的matplotlib来实现曲线图形的绘制.matplotlib是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图. 二.绘制图形 1.第一个曲线图 代码: 具体的绘制的代码如下所示: import matplotlib.pyplot as plt import numpy as np r = np.

  • R语言数可视化Split violin plot小提琴图绘制方法

    最近小仙同学在好几篇文献里看到了这种小提琴图,暂时就肤浅地认为这是作者为了更好地比较对照组与实验组的差别,所以将同一个基因的小提琴图各画了一半,放在一起.为了跟上可视化的潮流,小仙也来尝试画一下这个没查到正经名字的图. Step1. 绘图数据的准备 首先要把你想要绘图的数据调整成R语言可以识别的格式,建议大家在excel中保存成csv格式.作图数据格式如下: Step2. 绘图数据的读取 data<-read.csv("your file path", header = T) #

  • R语言绘制小提琴图violin plot实现示例

    目录 Step1.绘图数据的准备 Step2.绘图数据的读取 Step3.绘图所需package的安装.调用 Step4.绘图 Step5.美化 即便小仙同学决定学习R语言来提升自己作图的“逼格”的时候,心中还有有些疑虑的(嘿嘿,我这么懒,可不愿意做无用功了?).仔细想了想,貌似又找到了两个学习R的理由. 一是R可以帮助我们避免重复劳动,实现“一劳永逸”的终极梦想.尽管非常不想承认这一事实,在科研的过程中,小仙同学制造出了大量“无效”的数据(sign…),但也不得不“绞尽脑汁”.“竭尽全力”地进

  • java和matlab画多边形闭合折线图示例讲解

    1.使用matlab作闭合多边形图 没有找到直接画多边形的函数,只能是将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第一个点连接.下面是一个示例的.m文件: 复制代码 代码如下: clear;clc;a=[0 2 4 6 8 10 12 14;0 2 1 4 6 6 5 7];  %要连接的点坐标 x;y[n,m]=size(a);for i=1:m-1;    line([a(1,i),a(1,i+1)],[a(2,i),a(2,i+1)]);  %连接节点line([

  • R语言绘制数据可视化小提琴图画法示例

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3. 绘图所需package的安装.调用 Step4. 绘图 小提琴图之前已经画过了,不过最近小仙又看到一种貌美的画法,决定复刻一下.文献中看到的图如下: Step1. 绘图数据的准备 首先要把你想要绘图的数据调整成R语言可以识别的格式,建议大家在excel中保存成csv格式.作图数据如下: Step2. 绘图数据的读取 data<-read.csv("your file path", header = T

  • 详解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:数

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • 详解Matlab实现动态表白图的绘制

    目录 1.幸福和快乐的哲学追问 2.提前祝女朋友节日快乐 2.1 展现 2.2 代码 1.幸福和快乐的哲学追问 在过去的500年间,我们见证了一连串令人惊叹的革命.地球在生态和历史上都已经整合成一个单一的领域.经济呈现指数增长,今日人类所享有的财富在过去只有可能出现在童话里.而科学和工业革命也带给我们超人类的力量,以及几乎可以说无限的能源.不仅社会秩序完全改变,政治.日常生活和人类心理也彻底改观. 只不过,我们真的更快乐了吗?人类在过去5世纪间积蓄的财富,是不是真的让我们找到了新的满足感?有了取

  • 详解Matlab如何绘制圆角半透明图例

    目录 基本使用 使用说明 完整代码 目前MATLAB的legend图例是不支持圆角和半透明的,欸,不能咱就自己画,就是把原始图例隐藏后不断追踪其位置绘制半透明的圆角矩形嘛,这有任何难度吗???完全没有!!因此就有了这篇推送(目前不支持三维绘图): 基本使用 继续假设我们编写了如下代码: t=0:0.35:3*pi; plot(t,sin(t),'Marker','d','LineWidth',2,'Color',[102,194,166]./255) hold on plot(t,cos(t./

  • 详解Python+Matplotlib绘制面积图&热力图

    目录 1.绘制面积图 2.绘制热力图 1.绘制面积图 面积图常用于描述某指标随时间的变化程度.其面积也通常可以有一定的含义. 绘制面积图使用的是plt.stackplot()方法. 以小学时期学的 常见的追击相遇问题中的速度时间图像为例,下边绘制出一幅简单的v-t图像. 全局字体设为默认的黑体,时间为从第0秒到第10秒,描述的是甲乙两个物体的速度.显然,面积则表示位移. 标题部分字体使用楷体(将系统中的TTF字体文件"STKAITI.TTF"复制到了当前目录下). import mat

  • 详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    目录 1.玫瑰花绘制 绘制效果 完整代码 2.月季花绘制 绘制效果 完整代码 3.玫瑰配色 4.旋转版本 1.玫瑰花绘制 绘制效果 完整代码 function drawrose grid on [x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi); p=(pi/2)*exp(-t./(8*pi)); change=sin(15*t)/150; u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change; y=2*(

  • 详解Flutter如何绘制曲线,折线图及波浪动效

    目录 正弦曲线绘制 波浪动效 曲线绘制 折线图 其他说明 总结 简介 上一篇用 Flutter 的 Canvas 画点有趣的图形我们介绍了使用 CustomPaint 绘制自定义形状,可以看到有了图形的平面绘制数学计算方法,我们可以画出所需的形状.本篇我们来介绍线条类图形的绘制,并且结合 Animation 实现了常见的波浪动效.通过本篇,你可以了解到: 正弦曲线的绘制 利用两条正弦曲线加上 Animation 实现波浪动效 曲线的一般绘制方法 折线图绘制 下面是最终实现的效果图,接下来我们一项

  • 基于Matlab绘制小提琴图的示例代码

    目录 violinChart 函数使用方法 基础使用,Y为矩阵 基础使用,Y为向量,X为标签 基础使用,多个图像绘制,并添加图例 violinChart 完整函数 ggtheme violin 函数介绍 ggtheme violin 主题 ggtheme violin 修饰函数代码 本文将为大家详细讲解Matlab中小提琴图的绘制函数及ggtheme主题修饰函数 violinChart 函数使用方法 写了个matlab绘制小提琴图的函数: 1.图中小提琴状区域为核密度曲线. 2.白色方块为25%

  • 详解Python+Pyecharts实现漏斗图的绘制

    目录 任务描述 相关知识 编程要求 测试说明 代码 任务描述 本关任务:利用 PyEcharts 绘制一个基本的漏斗图. 相关知识 为了完成本关任务,你需要掌握: 1. Python 的基本语法 2. PyEcharts 漏斗图的相关内容 导入图表类型 与日历图的操作类似,在文件的开始我们首先要将所需包导入,如右侧编辑器中代码所示. 导入漏斗图的语句为 from pyecharts.charts import Funnel 为了方便构造数据,我们还导入了 PyEcharts 提供的虚拟数据包,如

  • 详解JavaScript+Canvas绘制环形进度条

    目录 效果图 思考 实现思路 具体代码实现 效果图 思考 移动端的场景里经常会出现环形进度条的功能,在实现这个功能前,我预想的解决方案大致有: echarts.antv.canvas.svg 前面两种第三方提供的解决方案当然是简单,拿到案例修整一下即可,但是需要下载依赖,而且代码量不小.有没有不需要依赖第三方包,采用原生的写法,独立封装成一个组件,降低耦合,而且性能优越? 当然,那就主要介绍canvas的使用 实现思路 可以展示整个圆.半圆以及任意角度弧形(左右对称)的进度条.整体思路如下: 1

随机推荐