2015-12-28 193 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