2016-03-25 8 views
8

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

मेरे पेपर में मेरा फ़ॉन्ट आकार 9pt है और मैं यह सुनिश्चित करना चाहता हूं कि मेरे भूखंडों में फ़ॉन्ट आकार 9pt या 10pt है। लेकिन समुद्री तट में, फ़ॉन्ट का आकार मुख्य रूप से फ़ॉन्ट स्केल sns.set_context("paper", font_scale=0.9) के माध्यम से नियंत्रित होता है। इसलिए परीक्षण और त्रुटि के अलावा मुझे सही फ़ॉन्ट आकार ढूंढना मुश्किल है। क्या ऐसा करने का एक और अधिक प्रभावी तरीका है?

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

मैंने नीचे अपना कोड संलग्न किया है। मैं दो कॉलम अकादमिक पेपर के लिए साजिश को प्रारूपित करने के तरीके पर किसी भी टिप्पणी की सराहना करता हूं। मेरा लक्ष्य फ़ॉन्ट आकार या साजिश विकृत किए बिना आकृति के आकार को नियंत्रित करने में सक्षम होना है। मैं अपने पेपर लिखने के लिए लेटेक्स का उपयोग करता हूं।

# Seaborn setting                                    
sns.set(style='whitegrid', rc={"grid.linewidth": 0.1}) 
sns.set_context("paper", font_scale=0.9)             
plt.figure(figsize=(3.1, 3)) # Two column paper. Each column is about 3.15 inch wide.                                                         
color = sns.color_palette("Set2", 6) 

# Create a box plot for my data              
splot = sns.boxplot(data=df, palette=color, whis=np.inf,        
     width=0.5, linewidth = 0.7) 

# Labels and clean up on the plot                                                                        
splot.set_ylabel('Normalized WS')              
plt.xticks(rotation=90)                
plt.tight_layout()                  
splot.yaxis.grid(True, clip_on=False)             
sns.despine(left=True, bottom=True)             
plt.savefig('test.pdf', bbox_inches='tight')           
+1

मुझे पूरा यकीन नहीं है कि आपका प्रश्न यहां क्या है।आप डिफॉल्ट को बदलने के लिए विभिन्न फ़ॉन्ट-संबंधित आरसी पैरामीटर में फ़ॉन्ट आकार प्रदान कर सकते हैं, और आप किसी भी विशिष्ट साजिश फ़ंक्शन पर फोंटनाइज़ कर सकते हैं ताकि वह जो तत्व बना रहा है उसके लिए फोंट निर्दिष्ट कर सकें। 'font_scale' ऐसा करने का एकमात्र तरीका नहीं है, यह एक ही समय में कई चीजों को बदलने का एक सुविधाजनक तरीका है। – mwaskom

+0

इस प्रश्न का उत्तर नहीं दे रहा है, लेकिन संभवतः दृष्टिकोण में मौलिक परिवर्तन को संबोधित करना: ['psfrag'] (https://www.ctan.org/pkg/psfrag?lang=en) पैकेज पर एक नज़र डालें। यह आपको तारों के साथ एक आकृति में वर्णों को प्रतिस्थापित करने की अनुमति देता है। – Schorsch

+1

@mwaskom आपने मेरे प्रश्न का उत्तर दिया - आरसी के माध्यम से फ़ॉन्ट आकार निर्दिष्ट करें। लेकिन एक बात जो मुझे लगता है कि समुद्री तट में होना अच्छा होगा, वह फ़ॉन्ट_साइज निर्दिष्ट करने में सक्षम है जो वैश्विक रूप से सभी फ़ॉन्ट गुणों पर लागू होता है। क्योंकि आरसी का उपयोग करते हुए, मुझे अलग-अलग प्रत्येक पैरामीटर पैरामीटर (उदा। Axes.labelsize, legend.fontsize) सेट करना होगा। – kc2uno

उत्तर

6

आप सही हैं। यह एक बुरी तरह से दस्तावेज मुद्दा है। लेकिन आप प्लॉट बनाने के बाद सीधे फ़ॉन्ट आकार पैरामीटर (फ़ॉन्ट स्केल के विरोध से) बदल सकते हैं।

import seaborn as sns 
tips = sns.load_dataset("tips") 

b = sns.boxplot(x=tips["total_bill"]) 
b.axes.set_title("Title",fontsize=50) 
b.set_xlabel("X Label",fontsize=30) 
b.set_ylabel("Y Label",fontsize=20) 
b.tick_params(labelsize=5) 
sns.plt.show() 

है, जो इस में जो परिणाम: निम्न उदाहरण की जाँच करें

Different font sizes for different labels

यह भूखंडों के बीच में लगातार मुझे लगता है कि तुम सिर्फ यकीन है कि डीपीआई ही है बनाने की जरूरत है बनाने के लिए। जिस तरह से '0.sको थोड़ा सा अनुकूलित करने की संभावना भी है क्योंकि "font.size" पैरामीटर मौजूद है, लेकिन मुझे यह भी सुनिश्चित नहीं है कि यह कैसे करें।

नोट: और मुझे यह भी समझ में नहीं आता कि उन्होंने धुरी लेबल और टिक के लिए फ़ॉन्ट आकार चर का नाम क्यों बदल दिया। थोड़ा सा अंतर्ज्ञानी लगता है।

5

यह सब संतुष्ट है, है ना? सबसे आसान तरीका मैं निर्दिष्ट करने के लिए जब संदर्भ की स्थापना पाया है, उदा .:

sns.set_context("paper", rc={"font.size":8,"axes.titlesize":8,"axes.labelsize":5}) 

इस मानक की साजिश रचने उपयोग के 90% का ध्यान रखना चाहिए। कुल्हाड़ियों लेबल की तुलना में छोटे ticklabels अगर आप चाहते हैं, छोटे (ticklabel) मूल्य के लिए 'axes.labelsize' की स्थापना की और अक्ष लेबल (या अन्य कस्टम तत्वों) को निर्दिष्ट मैन्युअल, जैसे:

axs.set_ylabel('mylabel',size=6) 

आप इसे एक के रूप में निर्धारित कर सकते हैं कार्य करें और इसे अपनी स्क्रिप्ट में लोड करें ताकि आपको अपनी मानक संख्याएं याद न हों, या हर बार इसे कॉल न करें।

def set_pubfig: 
    sns.set_context("paper", rc={"font.size":8,"axes.titlesize":8,"axes.labelsize":5}) 
बेशक

आप configuration files उपयोग कर सकते हैं, लेकिन मुझे लगता है कि पूरे विचार एक सरल, सरल तरीका है, जिसके कारण इसके बाद के संस्करण में अच्छी तरह से काम करता है के लिए है।

नोट: यदि आप इन नंबरों को निर्दिष्ट करते हैं, तो sns.set_context में font_scale निर्दिष्ट करना सभी निर्दिष्ट फ़ॉन्ट तत्वों के लिए अनदेखा किया गया है, भले ही आप इसे सेट करते हैं।

+0

प्रकाशन ग्रेड आंकड़ों के लिए बोनस चेतावनी (नहीं पूछा गया है, इसलिए उत्तर का हिस्सा नहीं है): आप 'plt.figure' के साथ' dpi' निर्दिष्ट कर सकते हैं, लेकिन 'plt.subplots' के साथ नहीं, इसलिए आपको' plt.savefig (फ़ाइल नाम, डीपीआई = 500) '([यहां] (http://stackoverflow.com/questions/34028255/set-height-and-width-of-figure-created-with-plt-subplots-in- matplotlib/37405530 # 37405530)) – TNT

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