【问题标题】:Adding markers to histogram with fitted distribution curve in Matlab?在Matlab中使用拟合分布曲线向直方图添加标记?
【发布时间】:2015-10-14 19:36:57
【问题描述】:

您好,所以我创建了一个函数,该函数在给定指定数量的 bin 的情况下使用 histfit 创建具有拟合曲线的直方图,但我还需要在直方图中每个条形的中心添加单独的标记,以遵循拟合曲线。我该怎么办?我考虑使用曲线中的 XData 和 YData,然后用不同的线重新绘制,但我不知道如何让它实际绘制在每个条的中心?

【问题讨论】:

  • 请添加您编写的代码,以便我们更好地理解
  • 我的回答对你有帮助吗??

标签: matlab plot histogram curve-fitting


【解决方案1】:

您可以在调用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')

输出:

耶!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多