2009-07-17 1 views
20

J'affiche une image jpg (je la fais pivoter de 90 degrés, si cela est pertinent) et bien sûr les axes affichent les coordonnées des pixels. Je voudrais convertir l'axe de sorte qu'au lieu d'afficher le nombre de pixels, il affichera mon unité de choix - que ce soit radians, degrés, ou dans mon cas une coordonnée astronomique. Je connais la conversion du pixel au degré (par exemple). Voici un extrait de ce que mon code ressemble actuellement:Comment puis-je convertir (ou mettre à l'échelle) les valeurs d'axe et redéfinir la fréquence des tiques dans matplotlib?

import matplotlib.pyplot as plt 
import Image 
import matplotlib 
thumb = Image.open(self.image) 
thumb = thumb.rotate(90) 
dpi = plt.rcParams['figure.dpi'] 
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi 
fig = plt.figure(figsize=figsize) 
plt.imshow(thumb, origin='lower',aspect='equal') 
plt.show() 

... donc faisant suite à cela, puis-je prendre chaque valeur que matplotlib imprimerait sur l'axe, et le changement/le remplacer par une chaîne sortie à la place? Je voudrais faire cela pour un format de coordonnées spécifique - par exemple, plutôt qu'un angle de 10.44 (degrés), je voudrais qu'il lise 10 26 '24' '(ie, degrés, arminins, arcsecs)

Enfin sur ce thème, je voudrais contrôler la fréquence des tiques, sur l'intrigue. Matplotlib peut imprimer la valeur de l'axe tous les 50 pixels, mais je le voudrais vraiment tous les degrés (par exemple). Il semble que je voudrais définir un type de tableau avec les valeurs de pixels et leurs valeurs converties (degrés, etc.) que je veux afficher, en contrôlant la fréquence d'échantillonnage sur la plage xmin/xmax. Y at-il des experts Matplotlib sur Stack Overflow? Si oui, merci beaucoup d'avance pour votre aide! Pour en faire une expérience d'apprentissage plus, j'apprécierais vraiment d'être poussé dans le sens des tutoriels etc sur ce genre de problème matplotlib. Je me suis retrouvé très confus avec les axes, les axes, les figures, les artistes etc!

Cheers,

Dave

Répondre

31

On dirait que vous avez affaire à l'interface matplotlib.pyplot, ce qui signifie que vous serez en mesure de contourner la plupart des traitement des artistes, des haches, etc.. Vous pouvez contrôler les valeurs et les étiquettes des marques de tiques en utilisant la commande matplotlib.pyplot.xticks, comme suit:

tick_locs = [list of locations where you want your tick marks placed] 
tick_lbls = [list of corresponding labels for each of the tick marks] 
plt.xticks(tick_locs, tick_lbls) 

Pour votre exemple particulier, vous devez calculer ce que les marques de tiques sont par rapport aux unités (c.-à-pixels) de votre intrigue originale (puisque vous utilisez imshow) - vous avez dit que vous savez comment faire cela, cependant.

Je n'ai pas traité avec des images beaucoup, mais vous pouvez être en mesure d'utiliser une méthode différente tracé (par exemple pcolor) qui vous permet de fournir x et y informations. Cela peut vous donner quelques options supplémentaires pour spécifier les unités de votre image.

Pour les tutoriels, vous feriez bien de regarder à travers le matplotlib gallery - trouver quelque chose que vous aimez, et lire le code qui l'a produit. Un des gars de notre bureau a récemment acheté un livre sur Python visualization - cela peut être intéressant à regarder.

La façon dont je pense en général de toutes les différentes pièces est la suivante:

  • Un Figure est un récipient pour tous les Axes
  • Un Axes est l'espace où ce que vous dessinez (à savoirvotre parcelle) montre réellement
  • Un Axis est le x et y réels axes
  • artistes? C'est trop profond dans l'interface pour moi: je n'ai jamais eu à m'en soucier pour le moment, même si j'utilise rarement le module pyplot dans les parcelles de production.
+0

Merci - cela fonctionne superbement. Un autre commentaire cependant. Quand j'utilise plt.xticks, je n'obtiens plus la position x, y (je m'attendrais à ce que cela soit en pixels à tous égards) de la souris lorsque le tracé est affiché. Une idée de pourquoi cela serait? – Dave

+0

Cela * est * étrange - je n'ai jamais remarqué cela auparavant. Je ne sais pas assez sur cette fenêtre GUI pour faire une recommandation - peut-être une bonne question ici ou sur la liste de diffusion matplotlib. –

+0

Une meilleure solution pour convertir les coordonnées utilise le mot-clé 'extent' lors de l'utilisation de imshow. – Phlya

Questions connexes