首页 文章

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

提问于
浏览
0

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

1 回答

  • 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数据也是一样:

    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

    好极了!

相关问题