comment utiliser "extent" dans matplotlib.pyplot.imshow

j'ai réussi à tracer mes données et j'aimerais y ajouter une image de fond (carte). Les données sont tracées par les valeurs long/lat et j'ai aussi les valeurs long/lat pour les trois coins de l'image (en haut à gauche, en haut à droite et en bas à gauche).

j'essaye de comprendre comment utiliser l'option 'extent' avec imshow. Cependant, les exemples que j'ai trouvés n'expliquent pas comment attribuer x et y pour chaque coin ( dans mon cas, j'ai l'information pour les trois coins).

Comment puis-je attribuer emplacement de trois coins de l'image lors de l'ajout à l'intrigue?

Merci

25
demandé sur Chad 2011-08-09 20:34:54
la source

2 ответов

Extent définit les images max et min des valeurs horizontales et verticales. Il faut quatre valeurs comme ceci: extent=[horizontal_min,horizontal_max,vertical_min,vertical_max].

en supposant que vous avez la longitude le long de l'axe horizontal, alors vous prendrez extent=[longitude_top_left,longitude_top_right,latitude_bottom_left,latitude_top_left]. longitudine_top_left et longitudine_bottom_left devraient être les mêmes, latitude_top_left et latitude_top_right devraient être les mêmes, et les valeurs à l'intérieur de ces paires sont interchangeables.

Si votre premier élément de votre image doit être tracée dans le coin inférieur gauche, ensuite, utilisez le origin='lower' l'option imshow aussi, sinon la valeur par défaut 'upper' est ce que vous voulez.

31
répondu Yann 2011-08-09 21:38:13
la source

Voici un exemple basé sur http://matplotlib.org/examples/pylab_examples/image_demo3.html illustrant l'utilisation de la mesure.

#!/usr/bin/env python
from pylab import *
try:
    from PIL import Image
except ImportError, exc:
    raise SystemExit("PIL must be installed to run this example")

import matplotlib.cbook as cbook

datafile = cbook.get_sample_data('ada.png')
h = Image.open(datafile)
dpi = rcParams['figure.dpi']
figsize = h.size[0]/dpi, h.size[1]/dpi

figure(figsize=figsize)
ax = axes([0,0,1,1], frameon=False)
ax.set_axis_off()
ax.set_xlim(0,2)
ax.set_ylim(0,2)
im = imshow(h, origin='upper',extent=[-2,4,-2,4])  # axes zoom in on portion of image
im2 = imshow(h, origin='upper',extent=[0,.5,0,.5]) # image is a small inset on axes

show()

si vous ne définissez pas vos limites d'axe, elles deviennent vos extents et alors ne semblent pas avoir d'effet.

Ada Lovelace image with inset

8
répondu Dave X 2015-07-30 21:42:00
la source

Autres questions sur