一组X和Y相互关联的二维的数据数据(xn,yn),如何绘制三维的频率直方图,然后Z轴显示频率,再把每个间距的数据(x,y,z)都提取出来
1条回答 默认 最新
- joel_1993 2021-10-24 18:00关注
你好,之前给你弄过累计的,现在直接每个小格子里的也行啊:
function [X, Y, CDF] = ef2(x,y,nx,ny,xminmax,yminmax) % x:x的值 % y:y的值 % nx:x方向划分段数 % ny:y方向划分段数 % xminmax = [xmin, xmax] % yminmax = [ymin, ymax] num = length(x); if(num~=length(y)) error('输入的x和y长度必须相等') end if(nargin>6) % 如果变量个数大于6个,太多了 error('太多输入变量') elseif(nargin<2) % 如果变量个数小于2个,太少了 error('输入变量数目不足!!') end if(nargin==6) % 如果变量个数等于6个,赋值给ymin和ymax ymin = yminmax(1); ymax = yminmax(2); end if(nargin>=5)% 如果变量个数大于等于5个,赋值给xmin和xmax xmin = xminmax(1); xmax = xminmax(2); end if(nargin<=4)% 如果变量个数小于等于4个,自定义xmin和xmax xmin = min(x); xmax = max(x)+eps; ymin = min(y); ymax = max(y)+eps; end if(nargin<=3)% 如果变量个数小于等于3个,自定义y方向划分段数ny ny = 30; end if(nargin==2)% 如果变量个数等于2个,自定义x方向划分段数nx nx = 30; end xg = linspace(xmin, xmax, nx);%x方向的点 yg = linspace(ymin, ymax, ny);%y方向的点 [X,Y] = meshgrid((xg(1:end-1)+xg(2:end))/2, (yg(1:end-1)+yg(2:end))/2);%形成网格 [I,J] = meshgrid(2:nx, 2:ny);%下标网格 CDF = arrayfun(@(i,j)sum(x>=xg(i-1)&x<xg(i)&y<yg(j)&y>=yg(j-1))/num,I,J);%形成经验分布 end
主函数
clc;clear num = 1000000; x = randn(num,1);% 为了说明弄了两个正态分布搞联合,实际数据会更好 y = randn(num,1); [X, Y, C] = ef2(x,y);% ,50,50,[-3, 3],[-3, 3] figure(1);clf surf(X,Y,C)
Z轴就是频率
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化