La dernière fois, j'ai introduit le programme jusqu'à "Lire les coordonnées de l'image", mais cette fois, sur la base de ce programme, je vais lire les valeurs numériques sur le graphique (convertir les coordonnées de l'image en valeurs numériques sur le graphique). Je l'ai essayé.
La précision d'entrée des axes de coordonnées est faible, et ce n'est qu'une valeur approximative, donc ce n'est pas un substitut qui peut être utilisé dans la pratique, mais il semble que cela soit devenu un substitut que vous pouvez imaginer "Je veux faire ce genre de chose".
Comme mentionné ci-dessus, je pense que le défi consiste à améliorer la précision de saisie des axes de coordonnées du graphique et à améliorer encore la précision lorsque vous cliquez sur des points. À partir de maintenant, cela semble être assez difficile.
py_img_test1.py
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import warnings;warnings.filterwarnings('ignore')
im=Image.open('fig_PSHQ1.png')
im_list=np.asarray(im)
plt.imshow(im_list)
#click left-top and right-bottom
nn=2
a=plt.ginput(n=nn)
xi=a[0][0]
yi=a[0][1]
xf=a[1][0]
yf=a[1][1]
del a
#click on the graph
nn=5
a=plt.ginput(n=nn)
b=np.array(a)
vec_x=b[:,0]
vec_y=b[:,1]
plt.plot( vec_x,vec_y, 'ro' )
# range of the graph
#(xmin,xmax)=(0,12000)
#(ymin,ymax)=(60,90)
xmin,xmax=map(float,input('xmin xmax= ').split())
ymin,ymax=map(float,input('ymin ymax= ').split())
# calculation of the values
xx=xmin+(xmax-xmin)*(vec_x-xi)/(xf-xi)
yy=ymin-(ymax-ymin)*(vec_y-yf)/(yf-yi)
for x,y in zip(xx,yy):
print(x,y)
plt.savefig('fig_test.png', bbox_inches="tight", pad_inches=0.2)
plt.show()
$ python3 py_img_test1.py
xmin xmax= 0 12000
ymin ymax= 60 90
-31.25 62.1212121212
1937.5 70.202020202
3968.75 74.0404040404
6000.0 77.1717171717
9968.75 82.2222222222
c'est tout
Recommended Posts