如何解决一个简单的gnuplot数字转换器
有时,将扫描的图形数字化以获取数据并重新绘制图可能会很有用。 我知道有些专用工具具有很多功能,例如请参阅gnuplot主页上的其他链接:http://gnuplot.info/links.html
但是,如果您只有gnuplot,则可以使用几行代码来实现数字化器的简单版本,对于某些数据点数量有限的情况,这已经足够了。
因此,此gnuplot版本只是为了娱乐,共享和演示gnuplot功能。 如果您遇到问题:如何进一步改善?欢迎改进。
- 对数轴,时间轴,多条曲线,倾斜的图像等
工作原理:
- 图像被导入到图形中。 gnuplot支持例如GIF,JPG,PNG。要查看文件类型列表
show datafile binary filetype
。 - 前3次鼠标单击必须在1)y轴末端,2)原点和3)x轴末端
- 进一步的鼠标单击绘制数据点
实现了以下键绑定:
- 0(重新)定义从y轴末端到原点再到x轴末端的轴
- x删除所有数据点
- c仅清除最后一个数据点
- 将数据保存到文件
代码:
### a simple gnuplot digitizer
reset session
IMAGE = 'Superconductivity.png'
DATAFILE = 'Digitized.dat'
OriginX = 4.00
OriginY = 0.00
AxisYEnd = 0.15
AxisXEnd = 4.40
DataHeader = '# Temperature Resistance'
set print $Data
print DataHeader
set print
print $Data
$Axes <<EOD
EOD
set margins 0,0
AxesPoints = 0
fx(point) = (word(point,1)-word($Axes[2],1))/(word($Axes[3],1))*(AxisXEnd - OriginX)+OriginX
fy(point) = (word(point,2)-word($Axes[2],2))/(word($Axes[1],2))*(AxisYEnd - OriginY)+OriginY
bind Button1 '\
if (AxesPoints<3) { set print $Axes append; print MOUSE_X,MOUSE_Y; AxesPoints=AxesPoints+1; replot; } \
else { set print $Data append; print MOUSE_X,MOUSE_Y; set print; replot; }'
bind 0 'AxesPoints=0; set print $Axes; print ""; set print; replot;'
bind x 'set print $Data; print DataHeader; set print; replot'
bind c 'if (|$Data|>2) {array A[|$Data|]; do for [i=2:|$Data|-1] { A[i]=$Data[i] }; \
set print $Data; do for [i=1:|A|-1] { print A[i] }; } \
else {set print $Data; print DataHeader; }; set print; replot;'
bind s 'set print DATAFILE; print $Data[1]; set print DATAFILE append; \
do for [i=2:|$Data|] { print sprintf("%g %g",fx($Data[i]),fy($Data[i])) }; \
set print; pause -1 sprintf("Data saved to: %s",DATAFILE);'
plot IMAGE binary filetype=auto origin=(0,0) dx=1 dy=1 with rgbimage notitle,\
$Axes u 1:2 w l lw 2 lc "blue" noautoscale not,\
$Data u 1:2 w p pt 7 lc "red" noautoscale notitle
### end of code
输入:Superconductivity.png
过程(wxt终端的屏幕截图)
结果: Digitized.dat
# Temperature Resistance
4.3696 0.130726
4.3328 0.126117
4.232 0.113966
4.20241 0.00157884
4.19248 0.000406976
4.18307 0.000751641
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。