基于matlab的密度散点图绘制

1. 什么是密度散点图?

密度散点图就是在普通散点图的基础上,基于样本点一定范围的样本数计算该样本点的密度,以不同的颜色来显示样本点密度的大小,这样能够直观的显示出数据的空间聚集情况,如下图分别是二维和三维密度散点图

8425425e7e3938936bf724a74fc0402

Matlab进阶绘图第25期—三维密度散点图

2. 密度散点图绘制思路

2.1 网格划分

以二维散点图为例,将坐标轴范围划分为一系列大小相同的格网,统计每一个格网内部的样本点数除以格网面积,将所得结果作为该格网内样本点的密度,根据实际需要决定是否需要将密度进行归一化处理,这种方法计算量小,效率高,但效果相对较差

2.2 空间搜索

以二维散点图为例,对某一样本点搜索给定半径范围内的样本数,样本数除以搜索圆的面积作为样本点的密度,同样根据实际使用需要决定是否需要将密度进行归一化处理,这种方法计算量大,效率较低,但效果更好

3. matlab绘制密度散点图

基于网格划分的密度计算函数

function density = density_Grid(data,nd)
% 功能:利用格网划分提取离散点密度特征
% 输入:data   - 原始数据
% 输入:nd - 划分格网数
% 输出:density - 样本密度向量 
M = size(data,1);
N = size(data,2);
data_max = max(data);
data_min = min(data);
data_interval = (data_max - data_min)/nd;
if N == 2data_freq = zeros(nd,nd);data_index = zeros(M,N);for i = 1:Mx = data(i,1);y = data(i,2);c = min(floor((x - data_min(1))/data_interval(1))+1,nd);r = min(floor((data_max(2)-y)/data_interval(2))+1,nd);data_freq(r,c) = data_freq(r,c)+1;data_index(i,:) = [r,c]; end
elsedata_freq = zeros(nd,nd,nd);for i = 1:Mx = data(i,1);y = data(i,2);z = data(i,3);c = min(floor((x - data_min(1))/data_interval(1))+1,nd);r = min(floor((data_max(2)-y)/data_interval(2))+1,nd);v = min(floor((z - data_min(3))/data_interval(3))+1,nd);data_freq(r,c,v) = data_freq(r,c,v)+1;data_index(i,:) = [r,c,v];end
end
s = 1;
for i = 1:Ns = s * data_interval(i);
end
data_freq = data_freq./s;
density = zeros(M,1);
if N==2for i = 1:Mr = data_index(i,1);c = data_index(i,2);density(i,1) = data_freq(r,c);end
elsefor i = 1:Mr = data_index(i,1);c = data_index(i,2);v = data_index(i,3);density(i,1) = data_freq(r,c,v);end
end
% 密度归一化
max_density = max(density);
density = density./max_density;
end

基于空间搜索的密度计算函数

function density = density_KD(data,radius)
% 功能:利用KD树提取离散点密度特征
% 输入:data   - 原始数据
% 输入:radius - 搜索半径
% 输出:density - 样本密度向量 
M = size(data,1);
N = size(data,2);
density = zeros(M,1);
idx = rangesearch(data(:,1:N),data(:,1:N),radius,'Distance','euclidean','NSMethod','kdtree');
if N=2s = pi*radius^2
elses = 3/4*pi*radius^3
end
for i = 1:Mdensity(i,1) = length(idx{i})/s;
end
% 密度归一化
max_density = max(density);
density = density./max_density;
end

绘图函数

% 数据读取
% xbly_data = readtable("xiboliya.xlsx");
% xbly_data = table2array(xbly_data)
% xbly_a = xbly_data(:,2);
% xbly_dem = xbly_data(:,3);
% xbly_slope = xbly_data(:,4);
% xbly_ndvi = xbly_data(:,5);
% scatterDensity(xbly_slope(1:10:528523),xbly_a(1:10:528523),"slope","a")
function scatterDensity(x,y,xtitle,ytitle)
data=[x,y];
density_2D = density_KD(data(:,1:2),1);%将density2D_KD放在该代码同一路径下
% density_2D = density_Grid(data(:,1:2),40000);
scatter(x,y,10, density_2D, '.');
%设置色带
colormap('jet');
hXLabel = xlabel(xtitle);
hYLabel = ylabel(ytitle);
% 坐标轴美化
set(gca, 'Box', 'on', ...                                        % 边框'XGrid', 'off', 'YGrid', 'off', ...                      % 网格'TickDir', 'in', 'TickLength', [.015 .015], ...          % 刻度'XMinorTick', 'on', 'YMinorTick', 'on', 'YTick', 0:2:10,'YLim', [0,10]);            % 小刻度
% 字体和字号
set(gca, 'FontName', 'TimesNewRoma')
set([hXLabel, hYLabel],'FontName', 'TimesNewRoma')
set(gca, 'FontSize', 10)
set(gca, 'FontName', 'TimesNewRoma')
set([hXLabel, hYLabel],'FontSize', 11)
% 背景颜色
set(gca,'Color',[0 0 1]);
%设置色带显示
c = colorbar;
set(c,'tickdir','out');
%色带坐标范围及显示间隔
set(c,'YTick',0:0.2:1.0); 
% 保存结果
% saveas(gcf,strcat(xtitle,"_",ytitle,".fig"));
end

网格划分

slope_a1

空间搜索

slope_a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】C++语言基础学习笔记(六)——String字符串

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

MySQL 数据库安装教程详解(linux系统和windows系统)

MySQL 数据库是一种广泛使用的开源关系数据库管理系统。在 Linux 和 Windows 系统上安装 MySQL 数据库的步骤略有不同。以下是详细的安装教程。 Linux 系统安装教程 1. **安装前提**:确保你的 Linux 系统已经安装了 wget、unzip、tar 等必要的工具。 2. **下…

[word] word保存了但是再打开就没有了怎么办 #职场发展#其他

word保存了但是再打开就没有了怎么办 word保存了但是再打开就没有了怎么办? 一些朋友反映常常找不到自己保存在电脑中的Word的文档,不知道是怎么回事。如果是突然消失的,其实情况还是有很多种,相信大家也有一定的了解。在这里&a…

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法也非常简单。 远程连接到阿里云的 linux服务器后,可以在 ECS 远程连接命令行界面,点击左上角的文件,打开文件树。通过一行命令打包。 在打包后的 Saved.tar 文件上右键,选择 下载文…

【python】python入门(输出)

本篇文章将会介绍关于python的常见输出,希望对您有帮助! 输出 用到print函数 print(oh mygod)##或者 print("oh mygod")##或者 print("oh"" ""mygod") 输出结果: 用单引号、双引号都可以 ,引号中可…

下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO

下一代Windows操作系统提前曝光了?? 微软首个为Windows而设的智能体(Agent) 亮相: 基于GPT-4V,一句话就可以在多个应用中无缝切换,完成复杂任务。整个过程无需人为干预,其执行成功…

OpenMMlab导出DETR模型并用onnxruntime推理

使用mmlab导出onnx模型: from mmdeploy.apis import torch2onnx from mmdeploy.backend.sdk.export_info import export2SDKimg demo.JPEG work_dir ./work_dir/onnx/detr save_file ./end2end.onnx deploy_cfg mmdeploy/configs/mmdet/detection/detection_on…

【Qt】qt常用控件之QIcon 以及 qrc机制设置图片路径(QtCreator)

文章目录 1. QIcon / windowIcon2. setIcon() 与 setwindowIcon()2.1 setIcon() 介绍与使用2.2 setWindowIcon 介绍与使用 3. 路径问题 & qrc机制的引入3.1 绝对路径 / 相对路径 的问题3.2 qrc机制3.3 在QtCreator下利用qrc机制引入图片 1. QIcon / windowIcon QIcon QIco…

nextjs use client 和use server区别

在Next.js中,use client和use server是用于在服务器端和客户端渲染时分别执行特定逻辑的自定义钩子。虽然具体的实现方式可能会因项目而异,但一般来说,这两个钩子有如下的区别: 执行环境:use server主要用于服务器端渲…

VUE 字段为空时,一个class搞定,适用多种情形

我抄的,我抄的,我抄的,我抄的,我抄的 但真香 在写表格时&#xff0c;当某字段为空&#xff0c;你是否是这样写的&#xff1a; <el-table-column label"更新时间" align"center" prop"updateTime"><template slot-scope"scope&qu…

黄东旭:“向量数据库”还是“向量搜索插件 + SQL 数据库”?丨我对 2024 年数据库发展趋势的思考

本文由 PingCAP 黄东旭撰写&#xff0c;讨论了数据库技术在 2023 年的快速变革&#xff0c;并对 2024 年的数据库发展趋势进行了预测。文章重点关注了 GenAI 时代对数据库的影响&#xff0c;提出了在数据库选择上的两种路径&#xff1a;“向量数据库”和“向量搜索插件 SQL 数…

PR:时间重映射

做一个变换视频速度的效果 原片如下&#xff1a; 现在将跑步的人中间一段加速&#xff0c;后面一段减速 操作如下&#xff1a; 此处点击关键帧时&#xff0c;可以用钢笔工具&#xff0c;也可以按住Ctrl键点击 操作后效果如下&#xff1a;

Write operation failed: computed value is readonly问题解决

源代码&#xff1a; // 封装倒计时逻辑函数 import { computed, ref } from vue import dayjs from dayjs export const useCountDown () > {// 1.响应式数据const time ref(0)// 格式化时间const formatTime computed(()>dayjs.unix(time.value).format(mm分ss秒))/…

XGBoost模型部署与在线预测的完整指南

导言 XGBoost是一种强大的机器学习算法&#xff0c;但训练好的模型要想在实际应用中发挥作用&#xff0c;需要进行部署并实现在线预测功能。本指南将详细介绍如何在Python中部署XGBoost模型&#xff0c;并实现在线预测功能&#xff0c;同时提供相应的代码示例。 导出模型 首…

最短路径与关键路径

目录 文章目录 前言 一.最短路径 1.基本概念 1.1什么是源点&#xff1f; 1.2什么是最短路径 2.作用 3.迪杰斯特拉算法 4. 弗洛伊德算法 4.1过程演示 二.拓扑排序 1.基本概念 1.1什么是有向无环图 1.2什么是活动 1.3什么是AOV网 1.4什么是拓扑序列 1.5什么是拓扑…

Ubuntu 23.10通过APT安装Open vSwitch

正文共&#xff1a;888 字 8 图&#xff0c;预估阅读时间&#xff1a;1 分钟 先拜年&#xff01;祝各位龙年行大运&#xff0c;腾跃展宏图&#xff01; 之前在介绍OpenStack的时候介绍过&#xff08;什么是OpenStack&#xff1f;&#xff09;&#xff0c;OpenStack是一个开源的…

Python slice函数

在Python编程中&#xff0c;slice&#xff08;切片&#xff09;操作是一种强大且灵活的方式&#xff0c;用于从序列&#xff08;如列表、元组、字符串等&#xff09;中获取子序列。通过切片操作&#xff0c;可以轻松地提取序列中的一部分&#xff0c;进行遍历、修改、复制等操作…

掌握网络脉搏:深入解析OSI模型的传输层秘密

1. 传输层的基本概念和功能 OSI&#xff08;开放式系统互连&#xff09;模型是一个由国际标准化组织&#xff08;ISO&#xff09;提出的网络通信模型&#xff0c;包含七层架构。传输层位于第四层&#xff0c;主要负责在网络中的两个端点&#xff08;通常是两台计算机&#xff…

指针习题回顾(C语言)

目录 数组指针和指针数组 编程题&#xff1a; 字符串逆序 字符串左旋 题目1概述&#xff1a; 代码实现&#xff1a; 题目2概述&#xff1a; 代码实现&#xff1a; 调整奇偶顺序 题目概述&#xff1a; 代码实现&#xff1a; 冒泡排序 二级指针 代码解读&#xff1a; …

【AIGC】Stable Diffusion的插件入门

一、上文中作者使用插件包的方式下安装插件&#xff0c;用户也可以从Stable Diffusion的界面安装插件&#xff0c;如下图所示&#xff0c;在相应的插件后面点安装按钮。 二、介绍一些比较好用的插件 “adetailer” 插件是 Stable Diffusion 中的一个增强功能&#xff0c;旨在提…