有时,将扫描过的图形数字化以获取数据和重新绘制绘图可能是有用的。我知道有一些具有许多特性的专用工具,例如,请参阅gnuplot主页上的杂项链接:http://gnuplot.info/links.html
但是,是否有一种只使用gnuplot的方法呢?也许只需几行代码,您就可以实现一个简单版本的数字化器?对于某些情况下只有有限数量的数据点来说,这应该已经足够了。
(编辑:原问题的一部分现在作为答案)
发布于 2021-08-20 06:53:05
万一这对某人有用..。这个gnuplot版本只是为了好玩、共享和演示gnuplot功能。改进是值得欢迎的。
它的工作原理:
show datafile binary filetype.。
实现了以下键绑定:
F 222
代码:
### 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,0,0
AxesPoints = 0
fx(point) = (word(point,1)-word($Axes[2],1))/(word($Axes[3],1)-word($Axes[2],1))*(AxisXEnd - OriginX)+OriginX
fy(point) = (word(point,2)-word($Axes[2],2))/(word($Axes[1],2)-word($Axes[2],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.000751641https://stackoverflow.com/questions/64666454
复制相似问题