2013-03-01 17 views
14

Giả sử tôi đang vẽ một tập hợp các điểm có hình ảnh làm nền. Tôi đã sử dụng hình ảnh Lena trong ví dụ:Thêm hình nền vào ô có toạ độ góc đã biết

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread 

np.random.seed(0) 
x = np.random.uniform(0.0,10.0,15) 
y = np.random.uniform(0.0,10.0,15) 
img = imread("lena.jpg") 
plt.scatter(x,y,zorder=1) 
plt.imshow(img,zorder=0) 
plt.show() 

Điều này mang lại cho tôi enter image description here.

Câu hỏi của tôi là: Làm cách nào để xác định tọa độ góc của hình ảnh trong ô? Giả sử tôi muốn góc dưới cùng bên trái nằm ở số x, y = 0.5, 1.0 và góc trên cùng bên phải là x, y = 8.0, 7.0.

+2

'từ scipy.misc import imread' không hoạt động đối với tôi. Thay vào đó, người dùng cũng có thể sử dụng http://stackoverflow.com/questions/5073386/how-do-you-directly-overlay-a-scatter-plot-on-top-of-a-jpg-image-in-matplotlib – toom

+0

@ toom bạn có thể có một phiên bản cũ của SciPy – YXD

+0

Hmm, tôi sử dụng phiên bản scipy '0.12.0'. Phiên bản này có vẻ không quá cũ là từ tháng 9 năm 2013 (http://sourceforge.net/projects/scipy/files/scipy/). Tôi cài đặt nó trên mac của tôi thông qua brew. – toom

Trả lời

28

Sử dụng từ khóa extent của imshow. Thứ tự của đối số là [left, right, bottom, top]

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread 
import matplotlib.cbook as cbook 

np.random.seed(0) 
x = np.random.uniform(0.0,10.0,15) 
y = np.random.uniform(0.0,10.0,15) 

datafile = cbook.get_sample_data('lena.jpg') 
img = imread(datafile) 
plt.scatter(x,y,zorder=1) 
plt.imshow(img, zorder=0, extent=[0.5, 8.0, 1.0, 7.0]) 
plt.show() 
+0

Hoạt động tuyệt vời. Điều duy nhất tôi phải thêm là đặt 'plt.xlim' và' plt.ylim' nếu không thì khung nhìn/trục được gắn chặt với hình nền. – YXD

+0

Giải pháp tuyệt vời! Cảm ơn bạn YXD! Chỉ muốn thêm trong trường hợp ai đó gặp phải như vậy: nếu bạn làm plt.scatter(), sau đó plt.imshow(), hình có thể được bao phủ bởi hình ảnh, với kích thước được xác định trong "mức độ" kwarg. Nếu đây là trường hợp bạn có, hãy thử: làm plt.imshow() trước, sau đó plt.scatter(). Sau đó, bạn sẽ có một hình, với kích thước được xác định bởi dữ liệu của bạn (x, y) và hình ảnh được hiển thị trên biểu đồ. – Ruby

7

Bạn phải sử dụng tham số extent keyword:

imshow(img, zorder=0, extent=[left, right, bottom, top]) 

Các yếu tố của phạm vi được chỉ định theo đơn vị dữ liệu để hình ảnh có thể phù hợp với dữ liệu. Ví dụ: điều này có thể được sử dụng để che phủ đường dẫn địa lý (mảng tọa độ) trên hình ảnh bản đồ được tham chiếu địa lý.

Các vấn đề liên quan