2011-05-16 13 views
17

में matplotlib प्लॉट सहेजें मेरे पास कुछ रंगीन प्लॉट हैं जिन्हें मुझे ग्रेस्केल में सहेजने की आवश्यकता है। साजिश प्रारूपों को बदलने के बिना ऐसा करने का कोई आसान तरीका है?ग्रेस्केल

+4

इसके आसपास कुछ चर्चा हुई, देखें [रंग से बीडब्ल्यू/ग्रेस्केल में चित्र बदलें] (http://old.nabble.com /convert-figure-from-color-to-BW-grayscale-td29756144.html)। पता नहीं है कि 'set_gray' विशेषता matplotlib की नवीनतम रिलीज में उपलब्ध है या नहीं। – chl

+0

आप बाद में छवि मैगिक का उपयोग कर सकते हैं: 'कन्वर्ट-टाइप ग्रेस्केल old.png new.png' मुझे लगता है कि एसओ सीएफ [लिंक] पर कुछ पहले से ही कुछ है (http://stackoverflow.com/questions/3823752/display-image-as- ग्रेस्केल-उपयोग-matplotlib) –

उत्तर

4

दरअसल, इससे पहले पूछा गया था। यहाँ एक बहुत अच्छी जवाब है, जो गूगल पर 2 आता है (आज तक) है:
Display image as grayscale using matplotlib

और समाधान बहुत Suki के लिए इसी तरह की है ...

ओह, ठीक है, मैं बोर हो रहा हूँ, इसलिए मैं यहाँ भी पोस्ट एक पूर्ण विकसित कोड:

import numpy as np 
import pylab as p 
xv=np.ones(4)*.5 
yv=np.arange(0,4,1) 
xv1=np.ones(4)*-.5 
yv1=np.arange(0,4,1) 

#red vertical line on the right 
yv2=np.arange(0,1.5,0.1) 
xv2=np.ones_like(yv2)*.7 

#red vertical line on the left 
yv3=np.arange(0,2,0.01) 
xv3=np.ones_like(yv3)*-0.7 

### 
xc=np.arange(-1.4,2,0.05) 
yc=np.ones_like(xc)*1 

fig = p.figure() 
ax1 = fig.add_subplot(111) 
#adjustprops = dict(left=0.12, bottom=0.2, right=0.965, top=0.96, wspace=0.13, hspace=0.37) 
#fig.subplots_adjust(**adjustprops) 
ax1.plot(xv,yv, color='blue', lw=1, linestyle='dashed') 
ax1.plot(xv1,yv1, 'green', linestyle='dashed') 
ax1.plot(np.r_[-1:1:0.2],np.r_[-1:1:0.2],'red') 
ax1.plot(xc,yc, 'k.', markersize=3) 

p.savefig('colored_image.png') 

import matplotlib.image as mpimg 
import matplotlib.cm as cm 
import Image 

figprops = dict(figsize=(10,10), dpi=100) 
fig1 = p.figure(**figprops) 
#fig1 = p.figure() 
#ax1 = fig.add_subplot(111) 
adjustprops = dict() 
image=Image.open('colored_image.png').convert("L") 
arr=np.asarray(image) 
p.figimage(arr,cmap=cm.Greys_r) 
p.savefig('grayed.png') 
p.savefig('grayed.pdf',papertype='a4',orientation='portrait') 

इस रंग में एक ग्राफ का उत्पादन करेगा, की तुलना में यह पढ़ा है, यह पैमाने ग्रे कनवर्ट करते हैं, और एक png और पीडीएफ बचत होगी।

+1

यह उत्तर बहुत अच्छा नहीं है क्योंकि इसमें साजिश और किसी भी फ़ॉन्ट को रास्टराइज करने की आवश्यकता है। जब आप .png में कनवर्ट करते हैं तो रास्टरराइजेशन होता है। फाइल सिस्टम में पीडीएफ लिखना बेहतर होगा और उसके बाद ग्रेस्केल में कनवर्ट करना होगा, शायद भूत-स्क्रिप्ट का उपयोग करना। –

+0

"आयात छवि" अब काम नहीं करता है। इसके बजाय "पीआईएल आयात छवि से" – warunapww

6

यह वर्तमान में matplotlib से सीधे करने के लिए अजीब है, लेकिन "भविष्य में" वे set_gray(True) का समर्थन करने की योजना बनाते हैं (मेलिंग सूची थ्रेड here देखें)।

आपका सबसे अच्छा विकल्प रंग में उसे सहेज कनवर्ट करते हैं, या तो जनहित याचिका के साथ अजगर में करने के लिए किया जाएगा:

import Image 
Image.open('color.png').convert('L').save('bw.png') 

या ImageMagick के साथ कमांड लाइन से:

convert -type Grayscale color.png bw.png 
+0

अन्य उत्तरों की तरह, यह उत्तर बहुत संतोषजनक नहीं है क्योंकि यह साजिश को रास्टराइज करता है। –

0

और में जोड़ने के लिए म्यू माइंड का समाधान

यदि किसी भी कारण से आप इसे फ़ाइल में लिखने से बचना चाहते हैं तो आप एक फ़ाइल की तरह स्ट्रिंगियो का उपयोग कर सकते हैं:


import Image 
import pylab 
from StringIO import StringIO 

pylab.plot(range(10),[x**2 for x in range(10)]) 

IO = StringIO() 
pylab.savefig(IO,format='png') 
IO.seek(0) 

#this, I stole from Mu Mind solution 
Image.open(IO).convert('L').show() 
+0

अन्य उत्तरों की तरह, यह उत्तर बहुत संतोषजनक नहीं है क्योंकि यह साजिश को रास्टराइज करता है। –

1

मैं भी इस मुद्दे से जूझ रहा हूं। जहाँ तक मेरा बता सकते हैं, matplotlib स्केल के लिए प्रत्यक्ष रूपांतरण का समर्थन नहीं करता, लेकिन आप एक रंग पीडीएफ सहेजें और फिर उसे परिवर्तित कर सकते हैं Ghostscript साथ स्केल:

gs -sOutputFile = gray.pdf -sDEVICE = pdfwrite -sColorConversionStrategy = ग्रे-dProcessColorModel =/DeviceGray -DNOPAUSE -DBATCH -dAutoRotatePages =/कोई भी रंग.pdf

+0

का उपयोग क्यों करें ग्रेस्केल स्टाइल शीट का उपयोग न करें? http://matplotlib.org/examples/style_sheets/plot_grayscale.html –

+0

यह वास्तव में रंगीन साजिश को ग्रेस्केल में परिवर्तित नहीं करता है। यह डिफ़ॉल्ट रूप से कुछ तत्व ग्रे बनाता है। मेरे पास प्लॉट हैं जो मैं एक वेब पेज के लिए दोनों रंगों के रूप में निर्यात करना चाहता हूं और प्रिंटिंग के लिए ग्रे में परिवर्तित करना चाहता हूं। –

+0

आप एक संदर्भ प्रबंधक के भीतर स्टाइल शीट का उपयोग कर सकते हैं। उन लोगों के साथ गैर-डेटा प्रोसेसिंग प्लॉटिंग फ़ंक्शन पर अपनी कॉल लपेटें। –

संबंधित मुद्दे