在数组 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 差异。
我用颜料画出来的:
这方面的一个例子可以用任何随机数组来完成,所以我没有附加更多的代码,只是作为我正在尝试做的事情的一个想法。
假设您有两组绘图变量 x1
、y1
、x2
、y2
。你的情况
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');
美好的一天,
我有两个 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 差异。
我用颜料画出来的:
这方面的一个例子可以用任何随机数组来完成,所以我没有附加更多的代码,只是作为我正在尝试做的事情的一个想法。
假设您有两组绘图变量 x1
、y1
、x2
、y2
。你的情况
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');