2015-12-28 143 views
2

我试图绘制一个简单的线图并将一个背景图像插入到一个绘图。将背景图像绘制到matplotlib图

一个例子照片(与cat.jpg和dog.jpd):

I have two background images, I'd like to use; cat.jpg and dog.jpg

目前,我有一个图(从熊猫数据帧)的线和图像放到图码。然而,图像和线条图根本不“互动”。

fig, ax = plt.subplots(figsize=(15,10)) 
cat = np.array(Image.open('cat.jpg')) 
dog = np.array(Image.open('dog.jpg')) 
ax.imshow(cat, extent=[0, 10, 0, 18], aspect='auto', cmap='gray',alpha=0.75) 
ax.imshow(dog, extent=[10, 20, 0, 18], aspect='auto', cmap='gray',alpha=0.75) 

ax.plot(df['Series'],color='#3cb8fb',alpha=0.95,linewidth=3.0) 

plt.show() 
+1

你期待什么样的互动? – Stefan

+0

我的意思是我想裁剪猫和狗的图像,以便它们符合线条图(如示例图片中所示)。 – jjjayn

回答

6

可以使用plt.fill_between创建覆盖所述原点与线之间的区域的多边形,然后使用每个图像对象的.set_clip_path方法来显示该多边形落入图像的仅一部分。

例如:

from matplotlib import pyplot as plt 
from scipy.misc import lena 

fig, ax = plt.subplots(1, 1) 

x = np.linspace(0, 1, 10) 
y = np.random.rand(10) 
image = ax.imshow(lena(), cmap=plt.cm.gray, extent=[0, 1, 0, 1]) 
line = ax.plot(x, y, '-r', lw=2) 

# invisible clipping polygon 
poly = ax.fill_between(x, 0, y, visible=False) 
clip = poly.get_paths()[0] 

# you will need to do this separately for each of the images in your plot 
image.set_clip_path(clip, transform=ax.transData) 

plt.show() 

enter image description here