【matlab】如何提取论文plot图中的数据
用origin太麻烦了,还得安装付费插件,得到的数据的导出过程还麻烦,这里给出matlab的处理方法
参考链接1:matlab读取论文图中数据
参考链接2:【Matlab】Curve Fitting Tool的使用方式(拟合函数、导出函数、调用函数)
参考链接3:【matlab】矩阵按某列排序且不改变行
代码:
%https://blog.csdn.net/JISANSAN/article/details/106722830?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-2-106722830-blog-150155985.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.2&utm_relevant_index=5clc clear close all%% 1.图片与曲线间的定标im=imread('figure4.png');%读入图片(替换成需要提取曲线的图片)im=rgb2gray(im);%灰度变化thresh=graythresh(im)/10+0.9;%二值化阈值,设大一些,防止一些浅色线读取不到im=im2bw(im,thresh);%二值化set(0,'defaultfigurecolor','w')imshow(im)%显示图片[y,x]=find(im==0);%找出图形中的“黑点”的坐标。该坐标是一维数据。y=max(y)-y;%将屏幕坐标转换为右手系笛卡尔坐标y=fliplr(y);%fliplr()——左右翻转数组plot(x,y,'r.','Markersize',2);disp('请在Figrure中先后点击实际坐标框的两个顶点(左上点和右下点),即A、B两点. ');[Xx,Yy]=ginput(2);%Xx,Yy——指实际坐标框的两个顶点min_x=input('最小的x值');%输入x轴最小值max_x=input('最大的x值');%输入x轴最大值min_y=input('最小的y值');%输入y轴最小值max_y=input('最大的y值');%输入y轴最大值x=(x-Xx(1))*(max_x-min_x)/(Xx(2)-Xx(1))+min_x;y=(y-Yy(1))*(min_y-max_y)/(Yy(2)-Yy(1))+max_y;%% 2.画图figure(1)plot(x,y,'r.','Markersize',2);axis([min_x,max_x,min_y,max_y])%根据输入设置坐标范围title('由原图片得到的未处理散点图')% 使用getpts函数选择点[x_get_1,y_get_1]=getpts;% 选中的点的坐标[x_get_2,y_get_2]=getpts;% 选中的点的坐标%% 3.绘制提取数的据figure(101)plot(x_get_1,y_get_1,'r-','Markersize',2,'LineWidth',3)xlabel('x')ylabel('y')title('手动提取的散点图(曲线1)')figure(102)plot(x_get_2,y_get_2,'b-','Markersize',2,'LineWidth',3)xlabel('x')ylabel('y')title('手动提取的散点图(曲线2)')流程:
(1)运行代码
(2)在弹出的Figrure图框中先后点击实际坐标框的两个顶点(左上点和右下点)
(3)输入实际坐标框的坐标范围(图例为-12、12、-1200、1200)后即可使原图与matlab的figure坐标框对齐
(4)在figure坐标框中拾取点,点得按照曲线取,越密越好,拾取完毕后敲“enter键”即可绘制对应的数据图(示例中包含两种曲线,需要拾取两次)
拾取散点图1:
拾取散点图2:效果:
提取数据可以采用拟合的方法提升平滑性或者得到拟合函数,链接:【Matlab】Curve Fitting Tool的使用方式(拟合函数、导出函数、调用函数)
对比原图:
精确的扒图做不到,但是可以描述其数量、形状
