मैं एक समुद्री भूखंड के लिए आकृति का आकार कैसे बदलूं?


223

मैं अपनी छवि का आकार कैसे बदलूं, इसलिए यह मुद्रण के लिए उपयुक्त है?

उदाहरण के लिए, मैं A4 पेपर का उपयोग करना चाहूंगा, जिसके आयाम लैंडस्केप ओरिएंटेशन में 8.27 इंच तक 11.7 इंच हैं।

जवाबों:


197

आपको समय से पहले matplotlib चित्रा और अक्ष वस्तुओं को बनाने की आवश्यकता है, यह निर्दिष्ट करते हुए कि आंकड़ा कितना बड़ा है:

from matplotlib import pyplot
import seaborn

import mylib

a4_dims = (11.7, 8.27)
df = mylib.load_data()
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)

7
यह समाधान उस कोड के साथ काम नहीं करता है जो निम्न प्रकार का है (विभिन्न प्रकार के कथानक)। कोई विचार? मुझे लगता है कि "mylib" सिर्फ एक पुस्तकालय है जहां आपने अपना डेटा संग्रहीत किया है और इस कोड में इसकी आवश्यकता नहीं है: `अंजीर, कुल्हाड़ी = pyplot.subplots (figsize = (12,6)); sns.jointplot (memoryPrice ['price'], memoryPrice ['Memory']) `
TMWP

3
यह उत्तर @ TMWP के मामले में काम नहीं करता है, क्योंकि जॉइंटप्लॉट एक आंकड़ा स्तर विधि है। नीचे उत्तर देखें।
एलज

5
यह उत्तर उन प्लॉट प्रकारों के साथ काम नहीं करता है जो कुल्हाड़ी को इनपुट के रूप में स्वीकार नहीं करते हैं, उदाहरण के लिएsns.lmplot()
क्रिस

2
सीबोर्न में प्लॉट का आकार heightऔर aspectमापदंडों का उपयोग करके सेट किया जाना चाहिए जैसा कि यहां बताया गया है stackoverflow.com/a/51602446/2412831
LeandroOrdonez

@LeandroOrdonez जो वास्तव में कुल्हाड़ियों के स्तर के कार्य के लिए लागू नहीं है।
पॉल एच।

234

आप सीबोनल विधि में rcकुंजी के साथ डिक्शनरी को पास करके भी फिगर का आकार निर्धारित कर सकते हैं :'figure.figsize'set

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

अन्य विकल्प का उपयोग करने के हो सकता है figure.figsizeकी rcParamsनीचे के रूप में सेट आंकड़ा आकार करने के लिए:

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27

अधिक विवरण matplotlib प्रलेखन में पाया जा सकता है


5
अन्य समाधानों के विपरीत, यह समाधान भूखंड को परिभाषित करने का एक निश्चित तरीका नहीं है। धन्यवाद।
LoMaPh

7
ध्यान दें कि जब आप snsetset () कहते हैं, तो यह matplotlib डिफ़ॉल्ट के बजाय sns डिफ़ॉल्ट के लिए आपकी आकृति शैलियों को डिफ़ॉल्ट करता है, उदाहरण के लिए आपके आंकड़े फिर अचानक सफेद ग्रिड के साथ एक ग्रे बैकग्राउंड होंगे - यहाँ देखें: seaborn.pydib.org/ ट्यूटोरियल / सौंदर्यशास्त्रhtml इसके अलावा, मेरे प्लॉट के आकार (एक sns.pairplot) पर इसका कोई प्रभाव नहीं पड़ा।
मेलिसा

न ही एक sns.boxplot के रूप में मेरा
गॉर्डन

इसके लिए धन्यवाद @Melissa। इससे मुझे एहसास हुआ कि मुझे .set()पहले फोन करना होगा.set_style()
जोरिजस्मिट

89

आप संदर्भ को posterमैन्युअल रूप से सेट या सेट कर सकते हैं fig_size

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(0)
n, p = 40, 8
d = np.random.normal(0, 2, (n, p))
d += np.log(np.arange(1, p + 1)) * -5 + 10


# plot
sns.set_style('ticks')
fig, ax = plt.subplots()
# the size of A4 paper
fig.set_size_inches(11.7, 8.27)
sns.violinplot(data=d, inner="points", ax=ax)    
sns.despine()

fig.savefig('example.png')

यहां छवि विवरण दर्ज करें


3
यह उत्तर उन प्लॉट प्रकारों के साथ काम नहीं करता है जो कुल्हाड़ी को इनपुट के रूप में स्वीकार नहीं करते हैं, उदाहरण के लिएsns.lmplot()
क्रिस

क्रिस के जवाब पर विस्तार करने के लिए, कुछ सीबोनल प्लॉट कई अक्षों के साथ समग्र आंकड़े उत्पन्न करते हैं, इसलिए वे एक तर्क के रूप में एक अक्ष नहीं ले सकते हैं।
मारमड्यूक

73

ध्यान दें कि यदि आप सीबोर्न में एक "आंकड़ा स्तर" विधि को पारित करने की कोशिश कर रहे हैं (उदाहरण के लिए lmplot, catplot/ factorplot, jointplot) तो आप इसका उपयोग कर heightऔर तर्कों के भीतर निर्दिष्ट कर सकते हैं aspect

sns.catplot(data=df, x='xvar', y='yvar', 
    hue='hue_bar', height=8.27, aspect=11.7/8.27)

Https://github.com/mwaskom/seaborn/issues/488 देखें और इस तथ्य पर अधिक जानकारी के लिए मैटलोट्लिब ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस का उपयोग करके सीबोर्न के साथ प्लॉटिंग करें कि आंकड़ा स्तर के तरीके एक्सिस विनिर्देशों का पालन नहीं करते हैं।


11
यह अब तक का एकमात्र उत्तर है कि एसईएस भूखंडों के साथ सही ढंग से व्यवहार करता है जो कुल्हाड़ी को एक तर्क के रूप में स्वीकार नहीं करते हैं।
मेलिसा

ध्यान दें कि ऊँचाई और पहलू एक एकल "पहलू" के आयामों को नियंत्रित करते हैं, यानी एक सबप्लॉट। तो यह सीधे पूर्ण आंकड़ा आयामों को समायोजित नहीं करता है।
बेर्नी

43

पहले matplotlib आयात करें और आकृति का आकार सेट करने के लिए इसका उपयोग करें

from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)

20

इसका उपयोग करके किया जा सकता है:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)


16

मेरे प्लॉट (एक एसएनएस फैक्टरप्लॉट) के लिए प्रस्तावित उत्तर ठीक काम नहीं करता है।

इस प्रकार मैं उपयोग करता हूं

plt.gcf().set_size_inches(11.7, 8.27)

सीबॉर्न के साथ प्लॉट के बाद (ताकि सीबर्न में कुल्हाड़ी को पास करने या आरसी सेटिंग्स को बदलने की कोई आवश्यकता नहीं है)।


1
यह एकमात्र ऐसा समाधान है जो मेरे लिए एक FacetGridpython g = sns.FacetGrid(df.set_index('category'), col="id") pyplot.gcf().set_size_inches(11.7, 8.27) g.map(lambda data, color: data.plot.barh(color=color), "count")
निकोलस78

मुझे भी। ऐसा लगता है sns.FacetGridकि गणना की गई मान (सेट द्वारा ) के अनुसार एक आंकड़ा आकार निर्धारित किया जाएगा heightऔर aspectसीबॉर्न प्लॉटिंग के बाद सीधे आकृति का आकार बदलना होगा। और प्लॉट की अन्य बारीक ट्यूनिंग आकृति का आकार बदलने के बाद हो सकती है
यिंग झाओ

16

"आंकड़ा स्तर" विधियों के बारे में एल्ज़ उत्तर के अलावा, जो मल्टी-प्लॉट ग्रिड ऑब्जेक्ट लौटाते हैं, यह आंकड़ा ऊंचाई और चौड़ाई को स्पष्ट रूप से निर्धारित करना संभव है (जो पहलू अनुपात का उपयोग किए बिना) निम्नलिखित दृष्टिकोण का उपयोग कर रहा है:

import seaborn as sns 

g = sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar')
g.fig.set_figwidth(8.27)
g.fig.set_figheight(11.7)

set_figwidthऔर set_figheightग्रिड वस्तुओं के लिए अच्छी तरह से काम करते हैं। >>> इंपोर्ट सीबॉर्न >>> इंपोर्ट मेटप्लोटलीबहुम्प्लॉट पाइलट के रूप में >>> टिप्स = सीबोर्न.लोड_डैटसेट ("टिप्स") >>> जी = सीबॉर्न.फैसेटग्रिड (टिप्स, कॉल = इस समय, पंक्ति = "स्मोकर") >>> जी = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
पॉल ग्रेग्यूक्स

1
शायद एपीआई बदल गया है, लेकिन मेरे लिए यह g.fig.set_figwidth के बजाय g.figure.set_figwidth था। मैं matplotlib संस्करण 3.1.0 और सीबोर्न 0.9.0 का उपयोग कर रहा हूं
NateW

6

पॉल एच और जे। ली के शीर्ष उत्तर सभी प्रकार के समुद्री जीवों के लिए काम नहीं करते हैं। के लिए FacetGridप्रकार (उदाहरण के लिए sns.lmplot()), का उपयोग sizeऔर aspectपैरामीटर।

Size पहलू अनुपात को बनाए रखते हुए ऊंचाई और चौड़ाई दोनों को बदलता है।

Aspect केवल चौड़ाई को बदलता है, ऊंचाई को स्थिर रखता है।

आप हमेशा इन दो मापदंडों के साथ खेलकर अपना इच्छित आकार प्राप्त कर सकते हैं।

साभार: https://stackoverflow.com/a/28765059/3901029

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