आप matplotlib के साथ आकृतियों के आकार को कैसे बदलते हैं?


2033

आप matplotlib के साथ आरेखित आकृति का आकार कैसे बदलते हैं?


740
plt.figure(figsize=(20,10))
स्टैकगेज

306
ORfig, ax = plt.subplots(figsize=(20, 10))
एलेक्सव

99
यह सोचकर कि चित्र का आकार पिक्सेल में है, मैंने निर्दिष्ट किया (800,600) और प्रोग्राम क्रैश हो गया! कृपया ध्यान दें कि इकाई इंच है।
राजा

2
@alexw इस प्रलेखन में है?
लियांग

48
fig = plt.gcf()-> fig.set_size_inches(11,8)एक बार और सभी के लिए भ्रम से बचने के लिए।
यूफोस

जवाबों:


1099

आंकड़ा आपको कॉल हस्ताक्षर बताता है:

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

figure(figsize=(1,1)) इंच-दर-इंच छवि बनाएगा, जो कि 80-बाय -80 पिक्सेल होगा जब तक कि आप एक अलग डीपीआई तर्क भी न दें।


95
यदि आपने पहले ही बना लिया है, तो मान लें कि यह 'आकृति 1' है (यह डिफ़ॉल्ट है जब आप pyplot का उपयोग कर रहे हैं), आप आंकड़ा (संख्या = 1, figsize = (8, 6), ...) का उपयोग कर सकते हैं इसका आकार बदलने के लिए आदि। यदि आप पाइलट / पाइलैब का उपयोग कर रहे हैं और show()पॉपअप विंडो बनाने के लिए, आपको कुछ भी प्लॉट करने figure(num=1,...) से पहले कॉल करने की आवश्यकता है - जैसे ही आप कुछ आकर्षित करते हैं तो पाइलपॉट / पाइलैब एक आकृति बनाता है, और पॉपअप का आकार प्रकट होता है। इस बिंदु पर तय किया जाना है।
drevicko

22
मुझे लगता है कि यदि आप डिफ़ॉल्ट तर्कों को हटा देते हैं तो आपका उत्तर बेहतर होगा। यह अनावश्यक रूप से शोर अनुपात के संकेत को कम करता है।
frmsaul

3
क्या इसका मतलब यह है कि यदि आप डीपीआई को 1 पर सेट करते हैं, तो एक इंच की इकाई के बजाय पिग्स एक पिक्सेल इकाई बन जाती है? वेब और जीयूआई इंटरफेस पर matplotlib का उपयोग करते समय यह अधिक उपयोगी होगा।
CMCDragonkai

1
अंजीर के साथ (1,1) आपके पास छवि में अनुपात 1: 1 होगा? क्योंकि मेरे सभी पाई चार्ट अंडाकार हैं, और मुझे उन्हें गोल करने का एकमात्र तरीका प्लॉट.एक्सिस ("बराबर") का उपयोग करके मिला। उनका एक ही प्रभाव होगा या वे अलग व्यवहार करते हैं?
ब्रेनो बाएर्दी

2
@BrenoBaiardi यह प्रश्न आकृति के आकार के बारे में है। आकृति के शीर्ष पर मौजूद कुल्हाड़ियों में अभी भी एक असमान पहलू अनुपात हो सकता है, भले ही आकृति पूरी तरह से 1: 1 हो, और यहां तक ​​कि अगर कुल्हाड़ी बॉक्स 1: 1 है, तो डेटा को एक्स और वाई दिशाओं में अलग तरीके से स्केल किया जा सकता है। तो, नहीं, वह आदेश समान पहलू अनुपात की गारंटी नहीं देगा।
Jouni लालकृष्ण Seppänen

741

यदि आप पहले से ही बना लिया है आंकड़ा आप जल्दी से यह कर सकते हैं:

fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

मौजूदा गुई विंडो ऐड में आकार परिवर्तन का प्रचार करने के लिए forward=True

fig.set_size_inches(18.5, 10.5, forward=True)

3
के साथ एक समस्या हल imshow, अब मैं इस कोड का उपयोग कर रहा हूँ के साथ साजिश रचने वाले क्षेत्र के आसपास की जगह को खत्म करने के बाद plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
हेलटनबिकर

7
इसी तरह, आप चला सकते हैं fig.set_dpi(100)
एरिक शिलट्स

1
मैं ipython 3.7, matplotlib 3.0.3 के तहत OS X पर इसका उपयोग कर रहा हूं। मैं आकृति के आकार को समायोजित करने में सक्षम हूं, लेकिन विंडो का आकार परिवर्तन नहीं होता है (आकृति कैनवास समायोजित होता है, लेकिन विंडो कैनवास को समायोजित करने के लिए नहीं बढ़ती या सिकुड़ती है)। आगे = सही कीवर्ड तर्क इस प्लेटफ़ॉर्म पर इच्छित प्रभाव के लिए प्रकट नहीं होता है।
। नील्सन

मेरे लिए यह काम गूगल
कोलैबोरेटरी में

354

विरोध का ध्यान दें:
के अनुसार सरकारी matplotlib गाइड , के उपयोग pylabमॉड्यूल नहीं रह गया है की सिफारिश की है। कृपया matplotlib.pyplotइसके बजाय मॉड्यूल का उपयोग करने पर विचार करें , जैसा कि इस अन्य उत्तर द्वारा वर्णित है ।

निम्नलिखित काम करने लगता है:

from pylab import rcParams
rcParams['figure.figsize'] = 5, 10

यह आंकड़ा की चौड़ाई 5 इंच, और इसकी ऊंचाई 10 इंच बनाता है ।

चित्रा वर्ग तब इसके एक तर्क के लिए डिफ़ॉल्ट मान के रूप में उपयोग करता है।


3
यह भी एक iPython नोटबुक के शीर्ष पर अच्छी तरह से काम करता है, जो (दिए गए- pylab = इनलाइन) rcParams पहले से ही शीर्ष स्तर पर आयात किया गया है।
nealmcb

4
यह मेरे Windows मशीन पर OO इंटरफ़ेस के साथ pyplot और Qt बैकएंड पर काम नहीं करता था। fig.set_size_inches(18.5, 10.5, forward=True)काम किया।
बेनेट ब्राउन

2
यह उत्तर वर्तमान में मेटा
मिशा

पायथन संस्करण के लिए: 3.6.4, matplotlib: 2.2.3 मुझे लगता है कि आपको एक सूची या टपल को पास करने की आवश्यकता है जैसे rcParams ['Fig.figsize'] = (5, 10)
स्टीव

2
किसी को भी पता है कि यह पहली बार सेल चलाने पर काम क्यों नहीं करता है?
g07kore

314

Plt.rcParams का उपयोग करना

यदि आप आंकड़ा वातावरण का उपयोग किए बिना आकार बदलना चाहते हैं, तो यह वर्कअराउंड भी है। इसलिए यदि आप plt.plot()उदाहरण के लिए उपयोग कर रहे हैं , तो आप चौड़ाई और ऊंचाई के साथ एक टपल सेट कर सकते हैं।

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)

जब आप इनलाइन साजिश करते हैं (जैसे IPython नोटबुक के साथ) तो यह बहुत उपयोगी है। जैसा कि @asamaier ने देखा है कि इस कथन को आयात विवरणों के एक ही सेल में नहीं रखना बेहतर है।

सेमी में रूपांतरण

figsizeटपल इंच स्वीकार करता है ताकि आप सेंटीमीटर आप उन्हें 2.54 से विभाजित करने के लिए है में यह सेट करना चाहते हैं के लिए एक नजर है इस सवाल का


4
अति उत्कृष्ट! इसे एक बार सेट करने और कई बार प्लॉट करने के लिए भी उपयोगी है।
ओटोमोर्फिक

किसी कारण से, ऐसा लगता है कि यह जुपिटर नोटबुक में काम नहीं करता है (लेकिन इसका उपयोग किया जाता है)।
रे

@ रे क्या आप अपने ज्यूपिटर नोटबुक के संस्करण और मेरे द्वारा किए गए व्यवहार के बारे में लिख सकते हैं
GM

@GM ने पिछली बार जब मैंने परीक्षण किया था, यह विंडोज 10 और Google क्रोम 63.0.3239.84 पर एनाकोंडा से ज्यूपिटर संस्करण 4.3.0 और पायथन 3.6.2 था।
रे

8
इसे काम करने के लिए मुझे plt.rcParams["figure.figsize"] = (20,3)एक अतिरिक्त सेल में कॉल करना होगा । जब मैं इसे उसी सेल में आयात विवरण के रूप में कहता हूं, तो इसे अनदेखा कर दिया जाता है।
अस्माइर

269

कृपया निम्नलिखित के रूप में एक सरल कोड आज़माएं:

from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()

आपको प्लॉट करने से पहले फिगर साइज सेट करना होगा।


14
यह उत्तर मुझे बताता है कि यह मी है atplotlib.pyplot.figure, जिसे अन्य स्पष्ट रूप से नहीं कहते हैं। मैं कोशिश कर रहा हूँ जैसे matplotlib.figureऔरmatplotlib.figure.Figure
Lyndon White

"_tkinter.TclError: इमेज बफर के लिए पर्याप्त मुक्त मेमोरी नहीं"
Cerin

5
plt.figure(figsize=(1,1))क्रूर कदम है। धन्यवाद।
ximiki

ज्यूपिटर नोटबुक में, यह मेरे लिए काम करता है: plt.figure (figsize = (20,10))
अभिषेक पूजारी

ज्यूपिटर नोटबुक का उपयोग करने वालों के लिए, कृपया सुनिश्चित करें कि आप अन्य plt कमांड से पहले plt.figure (figsize = (15, 10)) का उपयोग कर रहे हैं।
युहंग लिन

89

यदि आप पंडों में आकृति का आकार बदलने के लिए रास्ता खोज रहे हैं , तो आप ऐसा कर सकते हैं:

df['some_column'].plot(figsize=(10, 5))

dfपंडों का डेटाफ्रेम कहां है। या, मौजूदा आकृति या कुल्हाड़ियों का उपयोग करने के लिए

fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)

यदि आप डिफ़ॉल्ट सेटिंग्स बदलना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

import matplotlib

matplotlib.rc('figure', figsize=(10, 5))

73

के लिए गूगल में पहली कड़ी 'matplotlib figure size'है AdjustingImageSize ( पेज के गूगल कैश )।

यहाँ उपरोक्त पृष्ठ से एक परीक्षण स्क्रिप्ट है। यह test[1-3].pngएक ही छवि के विभिन्न आकारों की फाइलें बनाता है :

#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib

"""

import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.

import pylab
import numpy as np

# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)

pylab.plot(x,y)
F = pylab.gcf()

# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI

# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image

# Now make the image twice as big, making all the fonts and lines
# bigger too.

F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.

आउटपुट:

using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8.  6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16.  12.]
Size in Inches [ 16.  12.]

दो नोट:

  1. मॉड्यूल टिप्पणियां और वास्तविक आउटपुट अलग हैं।

  2. यह उत्तर आसानी से आकारों में अंतर देखने के लिए एक छवि फ़ाइल में सभी तीन छवियों को संयोजित करने की अनुमति देता है।


7
हर बार मैं यह याद करने की कोशिश कर रहा हूं कि यह कैसे करना है मैं इस पोस्ट को समाप्त करता हूं। तो, यह वह कोड है जिसे मैं सामान्य रूप से देख रहा fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
हूं

45

आप बस ( matplotlib.figure.Figure से ) का उपयोग कर सकते हैं :

fig.set_size_inches(width,height)

Matplotlib 2.0.0 के अनुसार, आपके कैनवास में परिवर्तन तुरंत दिखाई देगा, जैसा कि forwardकीवर्ड डिफॉल्ट करता हैTrue

यदि आप दोनों के बजाय केवल चौड़ाई या ऊँचाई बदलना चाहते हैं , तो आप उपयोग कर सकते हैं

fig.set_figwidth(val) या fig.set_figheight(val)

ये तुरंत आपके कैनवास को भी अपडेट करेंगे, लेकिन केवल Matplotlib 2.2.0 और नए में।

पुराने संस्करणों के लिए

आपको forward=Trueअपने कैनवास को लाइव-अपडेट करने के लिए स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है जो कि ऊपर निर्दिष्ट किए गए संस्करणों से अधिक है। ध्यान दें कि फ़ंक्शन set_figwidthऔर set_figheightफ़ंक्शंस forwardMatplotlib 1.5.0 से पुराने संस्करणों में पैरामीटर का समर्थन नहीं करते हैं ।


45
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()

आप भी उपयोग कर सकते हैं:

fig, ax = plt.subplots(figsize=(20, 10))

31

fig = ...लाइन से टिप्पणी करने का प्रयास करें

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2

fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()

21

यह मेरे लिए अच्छा काम करता है:

from matplotlib import pyplot as plt

F = plt.gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True) # Set forward to True to resize window along with plot in figure.
plt.show() # or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array

यह भी मदद कर सकता है: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


16

अपने फिगर का आकार बढ़ाने के लिए N को आपके pl.show () से ठीक पहले डालने की जरूरत है:

N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )

यह ipython नोटबुक के साथ भी अच्छा काम करता है।


10

चूंकि Matplotlib मीट्रिक प्रणाली का उपयोग मूल रूप से करने में सक्षम नहीं है , यदि आप अपने आकार का आकार उचित इकाई जैसे कि सेंटीमीटर में निर्दिष्ट करना चाहते हैं, तो आप निम्नलिखित कर सकते हैं (कोड gns-ak से ):

def cm2inch(*tupl):
    inch = 2.54
    if isinstance(tupl[0], tuple):
        return tuple(i/inch for i in tupl[0])
    else:
        return tuple(i/inch for i in tupl)

तो आप का उपयोग कर सकते हैं:

plt.figure(figsize=cm2inch(21, 29.7))

8

यह आंकड़ा तैयार होने के तुरंत बाद भी आकृति का आकार बदल देता है (कम से कम Qt4Agg / TkAgg का उपयोग करके - लेकिन MacOSX नहीं - matplotlib 1.4.0 के साथ):

matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)

7

साइहोडेलिया के जवाब को सामान्य बनाना और सरल बनाना। यदि आप किसी कारक द्वारा आकृति का वर्तमान आकार बदलना चाहते हैंsizefactor

import matplotlib.pyplot as plt

# here goes your code

fig_size = plt.gcf().get_size_inches() #Get current size
sizefactor = 0.8 #Set a zoom factor
# Modify the current size by the factor
plt.gcf().set_size_inches(sizefactor * fig_size) 

वर्तमान आकार को बदलने के बाद, यह हो सकता है कि आपको सबप्लॉट लेआउट को ठीक करना होगा । आप कर सकते हैं कि आंकड़ा विंडो जीयूआई में, या कमांड सबप्लॉट्स_डॉटल के माध्यम से

उदाहरण के लिए,

plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)

5

एक अन्य विकल्प, matplotlib में आरसी () फ़ंक्शन का उपयोग करने के लिए (इकाई इंच है)

import matplotlib
matplotlib.rc('figure', figsize=[10,5])

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