在数组 MATLAB 的某个 y 值处绘制垂直线

Plotting a vertical line at certain y-value of array MATLAB

美好的一天,

我有两个 CDF 数组,我正在绘制它们以相互比较。我想在两个绘制数组的 y 值都处于某个值时绘制一条线,以便我可以直观地比较两者之间的 x 值方差。

这是代码片段:

    [q, r] = ecdf(ray1_f);
    [w, z] = ecdf(mrc);
    plot(20*log10(r), q, 20*log10(z), w);  
    set(gca, 'YScale', 'log');
    xlabel('dB Relative to Mean');
    ylabel('Cumulative Property');
    title({'Cumulative Probability Distribution Rayleigh and 2 Branch'; 'Max Ratio Combining (filtered)'});
    legend('Rayleigh', '2 Branch Max Ratio');
    xlim([-50 0])

以及输出图表示例:

因此,例如,当直线的 y 值等于 10^-1 时,我想在两条直线上向下绘制垂直线到 x 轴。然后我可以使用这两点之间的 x 值差异来确定 dB 差异。

我用颜料画出来的:

这方面的一个例子可以用任何随机数组来完成,所以我没有附加更多的代码,只是作为我正在尝试做的事情的一个想法。

假设您有两组绘图变量 x1y1x2y2。你的情况

plot(20*log10(r), q, 20*log10(z), w);

给予

x1 = 20*log10(r); y1 = q;
x2 = 20*log10(z); y2 = w;

主要任务是为给定的 y 值找到 x 值,最简单的方法是使用 interp1.

进行插值

在你的例子中,ypoint = 10^(-1)

x1point = interp1(y1, x1, ypoint);

这是一个简单的线性插值,还有其他可能适合您的选项,可以在 documentation 中找到。

当然你需要为x2

做同样的事情
x2point = interp1(y2, x2, ypoint);

现在使用 stem 绘制垂直线最简单。

figure; hold on;
plot(x1, y1, x2, y2);
stem(x1point, ypoint, 'marker', 'none');
stem(x2point, ypoint, 'marker', 'none');

示例输出:

你的"dB difference"显然就是x2 - x1,或者abs(x2 - x1)


编辑:

可能值得注意的是,为了进一步简化事情,stem 可以采用矢量输入,因此整个代码可以是:

xpoints(1) = interp1(y1, x1, ypoint);
xpoints(2) = interp1(y2, x2, ypoint);
figure; hold on;
plot(x1, y1, x2, y2);
stem(xpoints, ones(size(xpoints))*ypoint, 'marker', 'none');