2015-12-24 2 views
5

में एक छवि पृष्ठभूमि पर प्लॉट मैं matplotlib का उपयोग कर एक छवि पृष्ठभूमि पर एक ग्राफ प्लॉट करना चाहता हूं। मैंने पाया है कि कैसे matlab में यह करने के लिए http://www.peteryu.ca/tutorials/matlab/plot_over_image_backgroundपायथन

मैं कुछ इस तरह बुनियादी की कोशिश की है:

im = plt.imread("dd.png") 
implot = plt.imshow(im) 
theta=np.linspace(0,2*np.pi,50) 
z=np.cos(theta)*39+145 
t=np.sin(theta)*39+535-78+39 
plt.plot(z,t) 
plt.show() 

लेकिन यह मुझे कुछ वास्तव में बदसूरत दिया: बस में की तरह

something really ugly

+2

'imshow' बहुत अधिक तर्क ले सकता है जो आपको यह निर्दिष्ट करने की अनुमति देता है कि छवि कहां रखा गया है और यह समन्वय-स्थान में है। डिफ़ॉल्ट रूप से, ऊपरी बाएं कोने (0, 0) पर रखा जाता है और प्रत्येक पिक्सेल चौड़ाई और ऊंचाई में 1x1 इकाइयां होती है। –

उत्तर

17

MATLAB उदाहरण जो आपने लिंक किया है, आपको imshow में कॉल करते समय छवि की वांछित सीमा निर्दिष्ट करनी होगी।

डिफ़ॉल्ट रूप से, matplotlib और MATLAB दोनों छवि के ऊपरी बाएं कोने को मूल स्थान पर रखें, नीचे जाएं और दाईं ओर से दाईं ओर जाएं, और प्रत्येक पिक्सेल को समन्वयित स्थान में 1x1 वर्ग के रूप में सेट करें। यह वही है जो आपकी छवि कर रही है।

आप इसे extent पैरामीटर के साथ नियंत्रित कर सकते हैं जो [left, right, bottom, top] सूची का रूप लेता है।

नहीं हद तक का उपयोग कर इस तरह दिखता है:

import matplotlib.pyplot as plt 
img = plt.imread("airlines.jpg") 
fig, ax = plt.subplots() 
ax.imshow(img) 

enter image description here

आप देख सकते हैं कि हम एक 1600 x 1200 सेम्युल एल जैक्सन की, हो रही काफी स्पष्ट रूप से, बल्कि सवार सांप के साथ नाराज है कि उनकी एयरलाइन उड़ान

लेकिन अगर हम इस पर दोनों आयाम में 0 से 300 से लेकर एक लाइन साजिश करना चाहते हैं, हम सिर्फ इतना है कि कर सकते हैं:

fig, ax = plt.subplots() 
x = range(300) 
ax.imshow(img, extent=[0, 400, 0, 300]) 
ax.plot(x, x, '--', linewidth=5, color='firebrick') 

enter image description here

मैं नहीं जानता कि अगर लाइन होगा श्री जैक्सन को अपनी सांप की समस्या से मदद करें। कम से कम, यह चीजों को और कठिन नहीं बनायेगा।