如何把别人论文中的光缆曲线图自动生成,自动转化为数据点

小木虫 --- 600万学术达人喜爱的学术科研平台
&&查看话题
曲线图如何插入,点击图能打开绘图软件
word中曲线图选择性粘贴,总共四幅图,保存再次打开图形变动,
人家期刊要word版,要求曲线图带数据格式,我用的excel画得图,选择性粘贴到word中,开始四幅图挨着,保存了,再打开,就出现图变动了。
学术必备与600万学术达人在线互动!
扫描下载送金币
北京学而思教育科技有限公司 地址:北京市海淀区北三环甲18号中鼎大厦A座1层102室 电话:010-  在自己写论文时,难免需要一些实测数据。很多情况下难以做相关实验或实验成本高。最简单的方法是引用别人论文中的一些原始实验数据进行分析或用自己的算法计算。本人最近需要的是火车轨道上的振动数据。
所需工具:MATLAB,PC自带的画图和截屏工具
第一步,预处理
首先,肯定要截取别人论文中的数据曲线,保存成png格式“.png”:
然后用PC机自带的画图软件简单截取图片,截取时要紧贴XY坐标轴:
再次用PC机自带的画图软件简单擦除或剪切图片,保存为:.png
第二步,MATLAB登场:
首先,灰度处理:
I=imread ('.png');
bw=rgb2gray(I); &%转换成灰度
bw1=bw&20; &%灰度值越大,颜色越浅. &bw1的值非0即1.
imwrite(bw1,'.png','png') &%保存为png灰度文件。
此时可以看到图片.png,神奇吧~
然后先看实线,用PC自带的画图工具(橡皮擦)将上图处理成如下(保存成.png):
然后执行MATLAB:
I=imread ('.png');
bw=rgb2gray(I);
bw1=bw&1; &%灰度值越大,颜色越浅. &bw1的值非0即1.
[tempy,tempx] = find(bw1==0);
plot(tempx,tempy,'.','MarkerSize',4)
%plot(tempx,tempy)
可得下图:
怎么感觉它可原图不一样?是不一样,因为图片的零点(0, 0)在左上角,所以需要对所有点的Y坐标进行镜面对称处理:
tempy = 0 - tempy + 419; &%做X轴对称,image is 537*419px
plot(tempx,tempy,'.','MarkerSize',4)
嗯,上图的感觉就对了。
然后进行坐标平移:注意原图中零点的像素位置(146, 258)PX:
%----平移坐标轴---图片总大小:537*419px--------------------
tempx = tempx - 146;
tempy = tempy - (419-258); &%这个地方自己慢慢想想
plot(tempx,tempy,'.','MarkerSize',4)
然后需要按比例缩放坐标轴,使其与原图片的比例一样。由下图看出原图.png中:
坐标(0,0)的像素点为(232,285)
坐标(100, 100)的像素点为(330, 180)
则X轴缩放比例为100/(330-232),y轴缩放比例为100/(285-180)
tempx = tempx*100/(330-232)
tempy = tempy*100/(285-180)
plot(tempx,tempy,'.','MarkerSize',4)
axis([-150 400 -150 250]); % 设置坐标轴在指定的区间 xmin xmax ymin ymax
此曲线和原图基本一致了,到此基本结束。
但是当把所有点连线时:
plot(tempx,tempy)
axis([-150 400 -150 250]); % 设置坐标轴在指定的区间 xmin xmax ymin ymax
由图片可以看出,细节处呈锯齿状。主要因为有时同一个X值可能有多个Y值。可去重:
toDel = [];
for i=1:( length(tempx) - 1)
&&&&if( tempx(i)==tempx(i+1) )
&&&&&&&&toDel = [toDel i];
for i=1:( length(toDel) )
&&&&tempx( toDel(i) ) = []; %删除数组中第i+1个坐标点
&&&&tempy( toDel(i) ) = [];
&&&&toDel = toDel - 1; &%数组中每个元素都减一,因为删除一个元素后数组tempx的总体长度会减1
plot(tempx,tempy)
axis([-150 400 -150 250]); % 设置坐标轴在指定的区间 xmin xmax ymin ymax
现在完全光滑了。
好了,赶快保存成TEXT吧...
fid = fopen('data-.txt', 'wt');
for i=1 : length(tempx) &% &%.6f--小数点后6位精度; \t--制表符(tab键),用于区分每列
&&&&fprintf( fid, '%.4f\t%.4f\n', tempx(i), tempy(i) );
fclose(fid);
完成! &朋友们多多点赞支持~
阅读(...) 评论()你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。GetData Graph Digitizer使用方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
GetData Graph Digitizer使用方法
上传于|0|0|暂无简介
你可能喜欢

我要回帖

更多关于 excel自动生成曲线图 的文章

 

随机推荐