2015-07-27 6 views
0

В matplotlib, что является наиболее подходящим способом построения изображения с его собственным соотношением сторон и, возможно, его собственным размером внутри существующих осей в определенном месте данных?Вставить изображение на текущий график без деформации

Например:

from matplotlib.pyplot import plot 
from matplotlib.image import imread 
from matplotlib.cbook import get_sample_data 

plot([50,60],[1000,2000]) 
im = imread(get_sample_data("grace_hopper.png", asfileobj=False)) 

Теперь я хочу, чтобы построить im например с центром в точке с координатами (57,1200) с некоторым масштабированием или максимальной высотой и без деформации.

Я думаю, что смесь между matplotlib.offsetbox.AnchoredOffsetbox и matplotlib.offsetbox.OffsetImage должна делать трюк, но я явно не знаком с этими классами.

ответ

2

Как и следовало ожидать, решение в matplotlib.offsetbox модуле:

from matplotlib.pyplot import plot, gca, show 
from matplotlib.image import imread 
from matplotlib.cbook import get_sample_data 
from matplotlib.offsetbox import OffsetImage, AnnotationBbox 

plot([50,60],[1000,2000]) 
im = imread(get_sample_data("grace_hopper.png", asfileobj=False))  
oi = OffsetImage(im, zoom=0.1) 
ab = AnnotationBbox(oi, (57, 1200), xycoords='data', frameon=False) 
gca().add_artist(ab) 
show() 

Вот результат: Well scaled and positioned image inside current plot

В самом деле, AnnotationBbox делает все необходимое, и намного больше с многочисленными опциями.

Смежные вопросы