在Matlab中使用拟合分布曲线在直方图中添加标记?

时间:2015-07-24 08:07:39

标签: matlab plot histogram curve-fitting

您好我创建了一个函数,该函数使用给定指定数量的bin的histfit创建具有拟合曲线的直方图,但我还需要在直方图中每个条的中心添加单独的标记,这些标记遵循拟合曲线。我该怎么做?我考虑过使用曲线中的XData和YData,然后用不同的线重新绘制,但我无法弄清楚如何让它实际绘制在每个柱的中心?

1 个答案:

答案 0 :(得分:0)

您可以在调用histfit期间使用输出参数来获取生成的图形的句柄,其中包含形成直方图的修补对象的所有信息以及拟合的线对象。然后,在x和y方向上获得中点只是一些数学问题。

以下是一个例子:

clear
clc
close all

%// Generate data
rng default; 
r = normrnd(10,1,100,1);

%// Use output to get handle
hHist = histfit(r);

hold on

现在补丁数据对应hHist的第一个条目:

hHist = 

  2x1 graphics array:

  Patch
  Line

获取y数据并找到中点:

AllYData = get(hHist(1),'YData');

YData = AllYData(2,:)/2;

请注意,AllYData是一个4x10数组,包含形成每个单独条形的4个角的y坐标。因此,我们只需要最大值(两个顶角中的任何一个)。

x data的相同内容:

AllXData = get(hHist(1),'XData');

这里AllXData是一个4 x 10阵列,包含形成直方图的条形每个角的x坐标。因此,我们只对中间2感兴趣,形成每个条的实际x范围。然后找出中心很容易:

XRanges = AllXData(2:3,:);

MidPoints = sum(XRanges)/2;

并使用scatter显示所有内容:(当然,您也可以使用plot):

scatter(MidPoints,YData,80,'y','filled')

输出:

enter image description here

耶!