Matplotlib फिगर फेसकलर (पृष्ठभूमि रंग)


95

क्या कोई यह बता सकता है कि आकृति के फेसकोलर को सेट करते समय नीचे दिया गया कोड काम क्यों नहीं करता है?

import matplotlib.pyplot as plt

# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(11)
fig1.set_figwidth(8.5)

rect = fig1.patch
rect.set_facecolor('red') # works with plt.show().  
                          # Does not work with plt.savefig("trial_fig.png")

ax = fig1.add_subplot(1,1,1)

x = 1, 2, 3
y = 1, 4, 9
ax.plot(x, y)

# plt.show()  # Will show red face color set above using rect.set_facecolor('red')

plt.savefig("trial_fig.png") # The saved trial_fig.png DOES NOT have the red facecolor.

# plt.savefig("trial_fig.png", facecolor='red') # Here the facecolor is red.

जब मैं fig1.set_figheight(11) fig1.set_figwidth(8.5)इनका उपयोग करके आंकड़ा की ऊंचाई और चौड़ाई निर्दिष्ट करता हूं तो कमांड द्वारा उठाया जाता है plt.savefig("trial_fig.png")। हालांकि, फेसकॉलर सेटिंग नहीं ली गई है। क्यों?

आपकी सहायता के लिए धन्यवाद।

जवाबों:


134

ऐसा इसलिए है क्योंकि savefigफिगर की पृष्ठभूमि के लिए फेसकोलर को ओवरराइड करता है।

(यह जान-बूझकर किया गया है, वास्तव में ... धारणा यह है कि आप संभवतः संरक्षित आकृति की पृष्ठभूमि के रंग को facecolorबौने के साथ नियंत्रित करना चाहते हैं savefig। यह एक भ्रामक और असंगत डिफ़ॉल्ट है, हालांकि!

सबसे आसान समाधान यह करना है fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(मैं यहां edgecolor को निर्दिष्ट कर रहा हूं क्योंकि वास्तविक आकृति के लिए डिफ़ॉल्ट edgecolor सफेद है, जो आपको सहेजे गए आंकड़े के चारों ओर एक सफेद सीमा देगा)

उम्मीद है की वो मदद करदे!


30

मुझे अपने प्रारंभिक के साथ चुने गए रंग को प्राप्त करने के लिए पारदर्शी कीवर्ड का उपयोग करना था

fig=figure(facecolor='black')

इस तरह:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

4
transparent=Trueयदि आप प्रदान करते हैं तो आप इसका उपयोग क्यों करते हैं facecolor?
एलेक्सिस। रोलैंड 3

27

savefigके लिए अपना स्वयं का पैरामीटर है facecolor। मुझे लगता है कि स्वीकृत उत्तर की तुलना में एक आसान तरीका यह है कि उन्हें हर बार डालने के बजाय केवल एक बार विश्व स्तर पर सेट किया जाए facecolor=fig.get_facecolor():

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'

1

यदि आप पृष्ठभूमि रंग बदलना चाहते हैं, तो यह प्रयास करें:

plt.rcParams['figure.facecolor'] = 'white'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.