Matlab绘制直方图、概率密度函数、累积分布函数

视频学习:https://www.bilibili.com/video/BV1HK411T76d?from=search&seid=16338053070486680597&spm_id_from=333.337.0.0

总结如下:

%%绘制直方图+概率密度函数+累积分布函数
%矩阵A是random生成0-1的随机数,或读入自己的数据
A = rand(1,500)*50;

%求A的最大、最小、均值
maxA = max(A);
minA = min(A);
meanA = mean(A);
%求极差、中位数、偏度、峰度
RangeA = range(A);
medianA = median(A);
skewnessA = skewness(A);
kurtosisA = kurtosis(A);

%生成一个画布
pic = figure; 
%绘制直方图(A中的元素有序划分入 x 轴上介于A的最小值和最大值间的 50 个等间距 bin中),centers表示每个bin中心在x轴
[counts,centers] = hist(A,50);
%绘制条形图,counts / sum(counts)计算频率
pic1 = bar(centers,counts / sum(counts),1);

set(pic1,'FaceColor','y')%设置矩形框颜色,‘b’为蓝色
set(pic1,'BarWidth',1);%设置矩形框宽度
%gcf返回当前axis对象的句柄值(一幅图像的每一个组成部分是一个对象)
%gca返回当前Figure对象的句柄值
set(gcf,'position',[220,200,900,600]);%设置画布的位置(220,200)和大小(宽900高600)
set(gcf,'position',[0.1,0.1,0.8,0.8]);%调整图形的位置和比例

axis([0 50 0 0.035]);%设置坐标轴范围[xmin xmax ymin ymax]

%计算概率密度函数,返回在xi点的概率密度f
[f,xi] = ksdensity(A);
hold on   %保留当前figure,实现图层叠加
pic2 = plot(xi,f,'LineWidth',1,'LineStyle','-','color','K');%绘制概率密度曲线


%计算概率密度积分分布函数
one_A = unique(A); %unique返回不重复的元素,产生的结果按升序排序

n_elements = histc(A,one_A);%统计在给定区间内的值的个数,左闭右开

c_elements = cumsum(n_elements);%计算元素累加的函数  
 %AX是坐标轴的句柄,AX(1)是左边的纵轴,AX(2)是右边的纵轴,H1,H2保存的是图形句柄,即两条线
[AX,H1,H2] = plotyy(0,0,one_A,c_elements);
%设置坐标轴的属性
set(AX(1),'ytick',0:0.005:0.035);%设置左边纵轴的刻度
set(AX(2),'ytick',0:50:500);%设置右边纵轴的刻度
set(AX(1),'ylim',[0,0.035]);%设置左边纵轴的取值范围
set(AX(2),'ylim',[0,500]);%设置右边纵轴的取值范围
%设置累积分布函数的线宽
set(H1,'LineWidth',2,'LineStyle','-','color',[0.9400 0.9400 0.9400]);
set(H2,'LineWidth',2)
%设置概率密度函数的线颜色
set(pic2,'LineWidth',2,'color','b');
%设置轴的颜色
set(AX(1),'ycolor','b');

set(AX(1),'ygrid','on');%打开左边纵轴网格
set(AX(2),'ygrid','on');%打开右边纵轴网格
%set(AX(1),'ygrid','off');%关闭左边纵轴网格

%设置title
title('test PDF')
%获取title的相关属性:get(gca,'title')
%设置字符、字体大小
set(get(gca,'title'),'String','Test PDF','FontSize',14);
set(get(gca,'title'),'Position',[25.001 0.0355 0]);%调整title位置

xlabel('X')%设置横轴标签
%set(get(gca,'xlabel'),'String','FontSize',14);%设置字体大小
set(get(AX(1),'ylabel'),'String','PDF','FontSize',14);%设置左纵轴标签
set(get(AX(2),'ylabel'),'String','CDF','FontSize',14);%设置右纵轴标签
set(get(AX(2),'ylabel'),'String','CDF','rotation',270,'Position',[77 250.0002-1.0000]);%设置旋转角度,标签位置

%添加文本 text(x,y,'')
textA = text(-10,0.025,{['Range:',num2str(RangeA)];['Max:',num2str(maxA)];['Mean:',num2str(meanA)];['Min:',num2str(minA)];['Kurtosis:',num2str(kurtosisA)];['Skewness:',num2str(skewnessA)]},'FontSize',14);
%根据图像显示,调整文本属性
set(textA,'FontSize',13,'Position',[10 0.025]);

%输出保存png
print(pic,'draw_hist.png','-dpng','-r200');%保存为png格式(-djpeg保存为JPEG格式)%‘-r200’是图像大小

运行结果如下:

 注:在编码编写时,可查看已设置的标签属性(必须先运行代码出现图像时,才能显示属性):

例如:在命令行窗口输入:>>get(AX(2),'ylabel'),可查看对于右侧轴标签的属性

 

Matlab中,可以使用两种方法来拟合已知分布的概率密度图。 方法一是使用`normfit`函数来拟合正态分布的参数,然后使用`pdf`函数来生成对应的概率密度曲线。首先,使用`hist`函数计算数据的频率分布直方图,得到每个区间的计数和中心值。然后,使用`normfit`函数计算数据的均值和标准差。接下来,使用`pdf`函数生成正态分布的概率密度曲线。最后,使用`bar`函数绘制频率分布直方图,使用`plot`函数绘制已知分布的概率密度曲线。以下是示例代码: ```matlab clc clear close all x = randn(1000, 1); % 画频率分布直方图 \[counts, centers\] = hist(x, 7); figure bar(centers, counts / sum(counts)) % 分布参数拟合 \[mu, sigma\] = normfit(x); % 画已知分布的概率密度曲线 x1 = -4:0.1:4; y1 = pdf('Normal', x1, mu, sigma); hold on plot(x1, y1) ``` 方法二是根据数据的均值和标准差直接拟合,使用`normpdf`函数生成一个对应的正态分布概率密度函数,乘以数据个数并将其画在图上。这种方法可以单独画曲线,相对于方法一比较灵活。以下是示例代码: ```matlab hold on x = -16:0.001:16; fx = normpdf(x, mean(data), std(data)); plot(x, fx * 500, 'g-'); ``` 你可以根据自己的需求选择适合的方法来拟合已知分布的概率密度图。希望对你有帮助! #### 引用[.reference_title] - *1* [Matlab分布拟合及绘制频率分布直方图](https://blog.csdn.net/qq_31816741/article/details/79360574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MATLAB分布统计以及正态分布拟合图](https://blog.csdn.net/weixin_42623330/article/details/113243367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Matlab绘制直方图概率密度函数累积分布函数](https://blog.csdn.net/m0_46427461/article/details/121197005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锅小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值