Lire les coordonnées du tracé sur le graphe avec Python-matplotlib (super débutant)

introduction

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.

Formule de conversion en valeur sur le graphique

x=x_{min}+(x_{max}-x_{min})\cdot \cfrac{k_{xx}-k_{xi}}{k_{xf}-k_{xi}}
y=y_{min}-(y_{max}-y_{min})\cdot \cfrac{k_{yy}-k_{yf}}{k_{yf}-k_{yi}}

programme

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()

Comment utiliser

  1. Une image s'affiche au démarrage du programme
  2. Cliquez sur le coin supérieur gauche et inférieur droit du graphique. Cela permet de saisir et de définir $ (k_ {xi}, k_ {yi}) $ et $ (k_ {xf}, k_ {yf}) $.
  3. Cliquez sur 5 points quelconques
  4. On vous demandera le minimum et le maximum de l'axe des x sur la console, alors entrez-le. En conséquence, $ x_ {min} $ et $ x_ {max} $ sont saisis et définis.
  5. On vous demandera le minimum et le maximum de l'axe y sur la console, alors entrez-le. En conséquence, $ y_ {min} $ et $ y_ {max} $ sont saisis et définis.
  6. Les valeurs sur le graphique des 5 points cliqués sont affichées.
  7. Fermez l'écran et quittez

Entrée / sortie sur la console

$ 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

Image de sortie

fig_test.png

c'est tout

Recommended Posts

Lire les coordonnées du tracé sur le graphe avec Python-matplotlib (super débutant)
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
Lire les coordonnées de l'image avec Python-matplotlib
Lisez le fichier csv avec le notebook jupyter et écrivez le graphique l'un sur l'autre
Afficher le graphique de tensorBoard sur Jupyter
Augmentez la taille de la police du graphique avec matplotlib
La base de la théorie des graphes avec l'animation matplotlib
Coordonnées les plus à droite de l'étiquette faite avec tkinter
Jouez avec l'implémentation de l'interface utilisateur de Pythonista 3 [Super Super Primer]
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
Lisez la puissance du compteur intelligent avec M5StickC (édition BP35C0-J11-T01)
[En 3 lignes] Tracez la pyramide des âges (graphique à barres du groupe d'âge / sexe) avec les pandas seuls
Comment tracer beaucoup de légendes en changeant la couleur du graphique en continu avec matplotlib
lire le tag qui vous est attribué dans ec2 avec boto3
Exécutons la commande à temps avec le bot discord
Lire le fichier GRIB2 de l'Agence météorologique sur pygrib
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Jusqu'au début du tutoriel django avec pycharm sous Windows
Obtenez le nom d'hôte du PC hôte avec Docker sous Linux
Composants liés du graphique
Tracé interactif du graphique 3D
[Statistiques] Saisir l'image de la théorie de la limitation du pôle central avec un graphe
J'ai étudié avec Kaggle Start Book basé sur kaggle [Partie 1]
Compter la partie concaténée maximale d'un graphe aléatoire avec NetworkX
J'ai vérifié l'image de l'Université des sciences sur Twitter avec Word2Vec.
Tracez la propagation du nouveau virus corona
Graphique d'appel de sortie avec PyCallGraph
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Lire le fichier Python # .txt pour Python super débutant super débutant avec travail .py
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Modifiez le fichier du serveur de destination de la connexion SSH sur le serveur avec VS Code
Lire le commentaire de la vidéo de Nico Nico sur le terminal en conjonction avec la vidéo
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
Lisez le fichier avec python et supprimez les sauts de ligne [Notes sur la lecture du fichier]
Préparer l'environnement de Chainer sur l'instance spot EC2 avec AWS Lambda
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran