【matlab】如何提取论文plot图中的数据
用origin太麻烦了,还得安装付费插件,得到的数据的导出过程还麻烦,这里给出matlab的处理方法
参考链接: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=5
clc
clear
close all
%% 1.图片与曲线间的定标
im=imread('figure4.png');%读入图片(替换成需要提取曲线的图片)
im=rgb2gray(im);%灰度变化
thresh = graythresh(im);%二值化阈值
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的使用方式(拟合函数、导出函数、调用函数)
对比原图:
精确的扒图做不到,但是可以描述其数量、形状