前言
在使用论文或数据手册图表数据时,会遇到使用对数坐标的时候,比如这样:
图一
在使用传统提取图片数据的工具时,如Matlab工具GRABIT,在提取坐标轴起止点后,默认为等间距坐标,提取点的坐标是错误的,提取的数据应该怎么处理呢?
一、对数坐标图是什么?
在横轴x和(或) 纵轴y上应用以 10 为底的对数刻度来绘制 x 和 y 坐标,这样做有两点好处:
1、将非线性变为线性的;
2、快速稳态的系统前段放大。
二、如何提取对数坐标数据
1.传统工具提取坐标数据
使用Matlab个人工具GRABIT按照流程提取曲线数据,如图一最上一条线,并plot画出结果:
rawdata=[0.0260371494556469,0.742680366660025;1.09473747377527,0.751733705642372;2.18568227000611,0.793910897452027;3.23912224734658,0.861561018536338;3.92610308134241,0.975024329071863;4.65045272400598,1.08849240001278;5.17305160293051,1.19429145786055;5.68830592983298,1.27588575843119;6.29336100622729,1.33583544774673;6.94339466324552,1.37031315986869;7.92986320696271,1.38317767941118;8.78180403947600,1.39602506149424;9.46187555416219,1.40375500777646;9.94763606428723,1.41018631546662];
figure
plot(rawdata(:,1),rawdata(:,2))
grid on
显然提取点横坐标是与原图对不上的,下面进行修正
2.修正数据
建立logax2linax函数
function y=logax2linax(a_min,a_max,x) % a_min:坐标最小点 a_max:坐标最大点 x:原始提取点数据
a_part=log10(a_max/a_min);
ya=fix(x/(a_min+(a_max-a_min)/a_part))+1;
y=10.^((x-(a_max-a_min)/a_part.*(ya-1))/((a_max-a_min)/a_part)).*10.^-(a_part-ya);
end
修正数据并做图比较:
x=logax2linax(1e-5,10,rawdata(:,1));
figure
subplot(2,1,1)
plot(rawdata(:,1),rawdata(:,2))
grid on
subplot(2,1,2)
semilogx(x,rawdata(:,2)) %matlab画x轴对数坐标
grid on
完美贴合!
总结
算法很简单,双对数坐标利用工具将y轴处理下,也希望读者有更好的解决方法,更多的问题一起留言讨论,大家多多关注!