你好,所以我创建了一个函数,在给定指定数量的bin的情况下使用histfit创建一个带有拟合曲线的直方图,但我还需要在直方图中每条柱的中心添加单独的标记,这些标记遵循拟合曲线 . 我该怎么做?我考虑过使用曲线中的XData和YData,然后用不同的线重新绘制,但我无法弄清楚如何让它实际绘制在每个柱的中心?
您可以在调用 histfit 期间使用输出参数来获取生成的图形的句柄,该图形包含形成直方图的修补对象的所有信息以及拟合的线对象 . 然后,在x和y方向上获得中点只是一些数学问题 .
histfit
这是一个例子:
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
hHist = 2x1 graphics array: Patch Line
获取y数据并找到中点:
AllYData = get(hHist(1),'YData'); YData = AllYData(2,:)/2;
请注意, AllYData 是一个4x10数组,包含形成每个单独条的4个角的y坐标 . 因此,我们只需要最大值(两个顶角中的任何一个) .
AllYData
x数据也是一样:
AllXData = get(hHist(1),'XData');
这里 AllXData 是一个4 x 10阵列,包含形成直方图的条形每个角的x坐标 . 因此,我们只对中间2感兴趣,形成每个条的实际x范围 . 然后找出中心很容易:
AllXData
XRanges = AllXData(2:3,:); MidPoints = sum(XRanges)/2;
用 scatter 显示所有内容:(当然也可以使用 plot ):
scatter
plot
scatter(MidPoints,YData,80,'y','filled')
输出:
好极了!
1 回答
您可以在调用
histfit
期间使用输出参数来获取生成的图形的句柄,该图形包含形成直方图的修补对象的所有信息以及拟合的线对象 . 然后,在x和y方向上获得中点只是一些数学问题 .这是一个例子:
现在补丁数据对应于
hHist
的第一个条目:获取y数据并找到中点:
请注意,
AllYData
是一个4x10数组,包含形成每个单独条的4个角的y坐标 . 因此,我们只需要最大值(两个顶角中的任何一个) .x数据也是一样:
这里
AllXData
是一个4 x 10阵列,包含形成直方图的条形每个角的x坐标 . 因此,我们只对中间2感兴趣,形成每个条的实际x范围 . 然后找出中心很容易:用
scatter
显示所有内容:(当然也可以使用plot
):输出:
好极了!