gpt4 book ai didi

matlab - matlab中y轴的自定义缩放

转载 作者:行者123 更新时间:2023-12-03 06:12:30 25 4
gpt4 key购买 nike

我在 IEEE 期刊论文中发现了 y 轴的奇怪缩放。

从上到下

y_轴 = [0.9999 0.9995 0.999 0.995 0.99 0.98 0.95 0.9 0.8 0.7 0.5 0.3 0.2 0.1 0.05 0.02 0.01 0.005 0.001 0.0005 0.0001]。

缩放不是对数的。刻度之间的间距不相等。当然,它不是线性的。您可以仅在一个 y 轴上详细查看大数字 (0.9... 0.999) 和非常小的数字 (0.0001... 0.1)。我不知道在 MATLAB 中该怎么做。我用谷歌搜索,但找不到。谁能帮我?提前致谢。

下图是如下代码:

clear all
close all
set(0,'defaulttextinterpreter','latex')
P_tb = 1e-2;
Ntrial = 1e7; % # of Monte Carlo trials
jey=sqrt(-1);
omega_db = -15; % sidelobe gain of main antenna
omega = db2pow(omega_db); % omega in linear scale
F_db = [-5 -2 0 2 5];
JNR_db = -5:20;
beta_db = 2;
F_lin = 10.^(0.1*F_db);
JNR = 10.^(0.1*JNR_db);
beta = 10.^(0.1*beta_db);
temp = cell (length(F_db),1);
P_b = zeros (length(JNR_db), length(F_db));
for ii = 1:length(F_db)
SNR = JNR;
x = sqrt(omega);
F = F_lin(ii);
P_b(:,ii) = 1 - 1./(F+1).*(1-marcumq(x.*sqrt(2.*SNR./(F+1)),sqrt(2.*SNR.*F./(F+1))))-F./(F+1).*marcumq(sqrt(2.*SNR.*F./(F+1)), x.*sqrt(2.*SNR./(F+1)));
temp (ii) = {['$F=$' num2str(F_db(ii)) ' dB']};
end
figure,
h = plot(JNR_db, (P_b));
set(gca,'YTick',fliplr([0.9999 0.9995 0.999 0.995 0.99 0.98 0.95 0.9 0.8 0.7 0.5 0.3 0.2 0.1 0.05 0.02 0.01 0.005 0.001 0.0005 0.0001]))
set(gca,'YTickLabel',num2cell(fliplr([0.9999 0.9995 0.999 0.995 0.99 0.98 0.95 0.9 0.8 0.7 0.5 0.3 0.2 0.1 0.05 0.02 0.01 0.005 0.001 0.0005 0.0001])));
grid on

最佳答案

在OP发布的图中,刻度线根本不是均匀分布的。此外,轴的比例是 S 形的倒数(见下文)。为了真正了解该论文的作者做了什么,我们可以骨架化该图

im = conv2(im, fspecial('gaussian', [5, 5], 2));
im = ~bwmorph(im < 2.5, 'skel', inf);

并获取精确位置y_px,如

y_px = flipud(find(im(:, 285) == 0));
y_px([1, 2, 3, 11, 15, 19, 28]) = [];

我正在删除一些来自趋势线或 x 轴 -10 刻度线标签的检测。

如果您将 y 刻度标签 y_val(将 y_axis 翻转为升序)绘制为这些像素位置 y_px 的函数,您可以确认该关系完全符合 @chapjc 所建议的 sigmoidal 关系。但是,为了生成类似的图,您可能更想反转公式并定义一个函数

px_y = @(y) log(-y ./ (y - 1));

然后您可以使用此函数进行绘图。您引用的论文显示了 x = -10 : 0.1 : 4 范围内的数据。让我们在同一范围内绘制 0.0001 到 0.9999 之间的正弦函数。请注意,我们使用缩放函数 px_y,然后替换 y 刻度位置标签

plot(x, px_y(0.7 + sin(x) / 4));
set(gca(), 'ytick', px_y(y_val), 'yticklabel', num2cell(y_val));

结果应该是这样的

enter image description here

总之,您可以定义一个函数y_px来转换您的y数据,然后设置您的y数据的ytickyticklabel属性轴。无论您为此方法选择何种比例,重要的是使用相同的函数转换ytick值和所有y数据。

关于matlab - matlab中y轴的自定义缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com