MATLAB | 如何解决实验数据散点图重叠问题(overlap)

这篇具有很好参考价值的文章主要介绍了MATLAB | 如何解决实验数据散点图重叠问题(overlap)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本期部分实验效果:

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

这期讲一下如果数据重合严重该咋办(overlap),事先说明,本文中的绘图均使用一个几行的简单小代码进行了修饰:

function defualtAxes
ax=gca;hold on;box on
ax.XGrid='on';
ax.YGrid='on';
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.LineWidth=.8;
ax.GridLineStyle='-.';
ax.FontName='Cambria';
ax.FontSize=12;
end

0 数据说明及基础绘图

假设我们随机构建两列数据:

% 随便生成散点
PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);
PntSet=[PntSet1;PntSet2;PntSet3];
X=PntSet(:,1);
Y=PntSet(:,2);

scatter函数绘图效果:

% 使用scatter绘图
scatter(X,Y,'filled','CData',[36,59,66]./255);

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

可以看到数据重叠严重,根本看不出哪里最密集,以下讲几个简单的解决数据重叠的方法。


1 设置透明度

这个就很简单,设置MarkerFaceAlpha即可:

% 使用scatter绘图
scatter(X,Y,'filled','CData',[36,59,66]./255,'MarkerFaceAlpha',.5);

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


2 根据密度设置CData

分割网格计算核密度,可以自行调整网格划分格子数,然后通过插值计算每个点所处位置核密度并将其映射为颜色:

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 使用scatter绘图
scatter(X,Y,'filled','CData',H);

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

当然可以通过colormap设置其他配色:

colormap(summer)

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

自己随便弄个配色:

CM=[0.2700         0    0.3300
    0.2700    0.2300    0.5100
    0.1900    0.4100    0.5600
    0.1200    0.5600    0.5500
    0.2100    0.7200    0.4700
    0.5600    0.8400    0.2700
    0.9900    0.9100    0.1300];
colormap(CM)

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

颜色有点不连续了,插一下值:

CM=[0.2700         0    0.3300
    0.2700    0.2300    0.5100
    0.1900    0.4100    0.5600
    0.1200    0.5600    0.5500
    0.2100    0.7200    0.4700
    0.5600    0.8400    0.2700
    0.9900    0.9100    0.1300];
CMX=linspace(0,1,size(CM,1));
CMXX=linspace(0,1,256)';
CM=[interp1(CMX,CM(:,1),CMXX,'pchip'),...
    interp1(CMX,CM(:,2),CMXX,'pchip'),...
    interp1(CMX,CM(:,3),CMXX,'pchip')];
colormap(CM)

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


3 等高线

还是上面的核密度计算方法,然后直接画为等高线:

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制等高线图及散点图
hold on
scatter(X,Y,1,'filled','CData',[36,59,66]./255);
contour(XMesh,YMesh,ZMesh,20,'LineWidth',.8)

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


4 等高线填充

还是和上面几乎一样:

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制等高线填充图
hold on
contourf(XMesh,YMesh,ZMesh,15,'EdgeColor','none')

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

我们设置小于一定值就不画了,这里设置为1e-3可自行调整:

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制等高线填充图
hold on
levels=linspace(1e-3,max(max(H)),15);
contourf(XMesh,YMesh,ZMesh,levels,'EdgeColor','none')

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

依旧改一下配色:

colormap(turbo)

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

也可以用自己配色,怕乱直接把这部分完整代码放在一起:

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制等高线填充图
hold on
levels=linspace(1e-3,max(max(H)),15);
contourf(XMesh,YMesh,ZMesh,levels,'EdgeColor','none')
scatter(X,Y,1,'filled','CData',[36,59,66]./255);

% 设置colomap
% colormap(turbo)
CM=[0.2700         0    0.3300
    0.2700    0.2300    0.5100
    0.1900    0.4100    0.5600
    0.1200    0.5600    0.5500
    0.2100    0.7200    0.4700
    0.5600    0.8400    0.2700
    0.9900    0.9100    0.1300];
CMX=linspace(0,1,size(CM,1));
CMXX=linspace(0,1,256)';
CM=[interp1(CMX,CM(:,1),CMXX,'pchip'),...
    interp1(CMX,CM(:,2),CMXX,'pchip'),...
    interp1(CMX,CM(:,3),CMXX,'pchip')];
colormap(CM)

% 简单修饰,可省略 
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


5 rug图

就是边缘加一些竖线状散点,就有点像地毯的边缘:

% 使用scatter绘图
hold on
scatter(X,Y,10,'filled','CData',[36,59,66]./255);

% 绘制边际线条状散点(rug图)
ax=gca;
XLim=ax.XLim;YLim=ax.YLim;
X=X(:)';Y=Y(:)';
LXX=[X;X;X.*nan];
LXY=[Y.*0+YLim(1);Y.*0+YLim(1)+(diff(YLim))/20;Y.*nan];
plot(LXX(:),LXY(:),'Color',[[36,59,66]./255,.3]);

LYY=[Y;Y;Y.*nan];
LYX=[X.*0+XLim(1);X.*0+XLim(1)+(diff(XLim))/20;X.*nan];
plot(LYX(:),LYY(:),'Color',[[36,59,66]./255,.3]);

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


6 分bin图

这里横竖都分为30块:

% 分X,Y30块的分bin图
binscatter(X,Y,[30 30])
colorbar

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


7 柱状图

在分bin图格子里画一些柱状图:

% 绘制散点图及柱状图
hold on
bcHdl=binscatter(X,Y,[20,20],'Visible','off');
scatter(X,Y,1,'filled','CData',[36,59,66]./255);
XMean=(bcHdl.XBinEdges(1:end-1)+bcHdl.XBinEdges(2:end))./2;
YMean=(bcHdl.YBinEdges(1:end-1)+bcHdl.YBinEdges(2:end))./2;
XSep=diff(bcHdl.XBinEdges(1:2));
YSep=diff(bcHdl.YBinEdges(1:2));
for i=1:size(bcHdl.Values,1)
    for j=1:size(bcHdl.Values,2)
        fill([-1,-1,1,1].*XSep./3+XMean(i),...
            [1,0,0,1].*YSep.*bcHdl.Values(i,j)./max(max(bcHdl.Values)).*.95+YMean(j),...
            [36,59,66]./255,'FaceAlpha',.9,'EdgeColor','none')
    end
end

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


8 surf曲面

类似分bin图,不过这里不是数量统计,而是核密度:

% 横竖分割计算核密度
n=30;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制surf曲面
hold on
ZMesh(ZMesh<1e-3)=nan;
surf(XMesh,YMesh,ZMesh,'EdgeColor','none');

% 加一行[1,1,1]把小数值设置为白色
colormap(parula)

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


9 气泡图

还是类似的,不过换成了bubble气泡图:

% 横竖分割计算核密度
n=30;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 绘制气泡图
ZMesh(ZMesh<1e-3)=nan;
bubblechart(XMesh(:),YMesh(:),ZMesh(:),ZMesh(:),'MarkerEdgeColor','none')
bubblesize([1,12])

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法


10 花里胡哨没用的三角剖分

% 横竖分割一百格计算核密度
n=100;
XList=linspace(min(X),max(X),n);
YList=linspace(min(Y),max(Y),n);
[XMesh,YMesh]=meshgrid(XList,YList);
F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);
ZMesh=reshape(F,size(XMesh));
H=interp2(XMesh,YMesh,ZMesh,X,Y);

% 没啥用的三角化插值绘图
hold on
DT=delaunay(X,Y);
Z=(H(DT(:,1),:)+H(DT(:,2),:)+H(DT(:,3),:))./3;
trisurf(DT,X,Y,X.*0,'CData',Z,'EdgeColor','none')

% 简单修饰,可省略
defualtAxes()

matlab计算两个图像重叠面积,如何用matlab画出两组实验测定数据概率密度曲线,求两,# MATLAB 科学绘图,matlab,线性代数,算法文章来源地址https://www.toymoban.com/news/detail-789397.html

到了这里,关于MATLAB | 如何解决实验数据散点图重叠问题(overlap)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 添加数据维度并使用Python绘制5D散点图

    大家好,散点图通常用于比较2个不同特征以确定它们之间的关系,散点图也可以添加更多的维度来反映数据,例如使用颜色、气泡大小等。在本文中,将介绍如何绘制一个五维的散点图。 数据集:  让我们从二维开始,简单地看一下 Healthy_life_expectancy_at_birth 和 Log_GDP_per_ca

    2024年02月12日
    浏览(45)
  • 【数据分析之道-Matplotlib(四)】Matplotlib散点图

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2024年02月05日
    浏览(41)
  • Python Matplotlib数据可视化绘图之(三)————散点图

    文本 本文我们主要介绍利用Python中的Matplotlib模块进行几种散点图的画法,包括整张图片只有一种颜色的不分组散点图、整张图片有好几种颜色的不分组散点图、整张图片有好几种颜色的分组散点图等。 主要利用Python中的Matplotlib模块完成该功能。 表格如下(示例): 班别

    2024年02月07日
    浏览(56)
  • python根据excel数据,基于散点图绘制棋盘图

    一、需求 根据可视化的需要,下图的数据需要使用棋盘图的样式来展示, 原始数据: 最终效果图: 二、处理方式 1、先将DataFrame数据转换为Numpy数组; 2、先使用np.transpose函数,找到0和1值的索引; 3、然后创建散点图; 4、完成散点图后,由于需要展示的坐标值是文本,所以

    2024年02月16日
    浏览(46)
  • echarts散点图自定义tooltip,鼠标放上去展示多行数据

    先放效果图 如图,就是鼠标悬停在散点上(这里的散点我替换成了图片,具体做法参考这篇文章:echarts散点图的散点用自定义图片替代-CSDN博客)时,可以展示多行数据。之前查找资料的时候,很多用字符串模板的,即{a}{b}{c}之类的,但是经过实践之后发现这种方法对于散点

    2024年04月24日
    浏览(42)
  • python中的matplotlib画散点图(数据分析与可视化)

    python中的matplotlib画散点图(数据分析与可视化) 效果图: 结束,再见

    2024年02月11日
    浏览(47)
  • 【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

    目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图/

    2024年02月08日
    浏览(54)
  • 【Python】Vscode使用pyecharts 3D散点图实现数据可视化

    目录 前言: 一:3D散点图效果图展示: 二.pyecharts是什么? 三.什么是3D散点图 四.环境准备 1.Vscaode下载扩展包: 2.安装pyechart库 五.3D散点图代码实现 1.导库和导包 2.导入数据(使用的是航空公司数据)  3.剔除年龄缺失值: 4.数据筛选 5.添加参数 6.实现效果图  7.修改参数实

    2024年02月07日
    浏览(55)
  • Python 数据可视化之密度散点图 Density Scatter Plot

    🍉 CSDN 叶庭云 : https://yetingyun.blog.csdn.net/ 密度散点图 (Density Scatter Plot),也称为密度点图或核密度估计散点图,是一种数据可视化技术,主要用于展示大量数据点在二维平面上的分布情况。与传统散点图相比, 它使用颜色或阴影来表示数据点的密度 ,从而更直观地展示

    2024年02月22日
    浏览(44)
  • 【Python数据可视化】通过Python制作 “3D散点图“ 和 “气泡图“

    前言 一、制作3D散点图 1、3D散点图的特点 2、导入数据 3.数据筛选  4.生成3D散点图  二、制作气泡图 1.气泡图的特点 2.导入数据  3.数据筛选  4.生成气泡图 总结 在对数据进行分析的时候,经常需要将数据进行可视化,以方便我们对数据的认识和理解,所以接下来是对 \\\"3D散

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包