【问题标题】:Plotting a vertical line at certain y-value of array MATLAB在数组MATLAB的某个y值处绘制一条垂直线
【发布时间】:2017-04-06 06:43:38
【问题描述】:

早安,

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

这是一个sn-p的代码:

    [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 差异。

我用颜料画出来:

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

【问题讨论】:

    标签: arrays matlab compare axis-labels cdf


    【解决方案1】:

    假设您有两组绘图变量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 差异”显然就是 x2 - x1abs(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');
    

    【讨论】:

    • 谢谢,我在发布它后正在处理这个问题,并找到了一种自己做的方法,但这在某些领域更简单,并且缩短了代码,这很好,因为我最终这样做了多次用于不同的图表
    • 不用担心@Trever,请查看我的编辑以获取一些扩展
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多