2016-03-25 17 views
8

Şu an akademik makaleleri için arsa oluşturmak için Seaborn'ı kullanmaya çalışıyorum. Çizimleri oluşturmak harika ve kolay görünüyor, ancak sorun yaşıyorum bir sorun parsellerde yazı tipi boyutu üzerinde iyi kontrol sahip olmaktır.Akademik yazılar için Seaborn çizimlerinde yazı boyutu üzerinde ince kontrol

Kağıdımdaki yazı büyüklüğümün boyutu 9pt olup, çizimlerimdeki yazı büyüklüğünün 9pt veya 10pt olduğundan emin olmak istiyorum. Ancak, deniz kenarında, yazı tipi boyutu çoğunlukla yazı tipi ölçeği sns.set_context("paper", font_scale=0.9) ile kontrol edilir. Deneme ve hata dışında doğru yazı tipi boyutunu bulmak benim için zor. Bunu yapmanın daha verimli bir yolu var mı?

Ayrıca yazı tipi boyutunun farklı deniz kıyısındaki araziler arasında tutarlı olduğundan emin olmak istiyorum. Ama tüm denizanağım arazilerim aynı boyuta sahip değil, bu nedenle bu parsellerde aynı font_scale'u kullanmak, bu parsellerde aynı yazı tipi boyutunu zorunlu olarak oluşturmuyor gibi görünüyor mu?

Aşağıdaki kodumu ekledim. İki sütunlu bir akademik makalenin taslağını nasıl biçimlendireceğine dair tüm yorumları takdir ediyorum. Amacım, yazı tipi boyutunu veya arsa bozulmadan şekil büyüklüğünü kontrol edebilmek. Kağıtlarımı yazmak için Lateks kullanıyorum.

# 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

Burada sorunuzun ne olduğundan emin değilim.Varsayılanları değiştirmek için fontla ilgili çeşitli rc parametrelerine yazı tipi boyutları sağlayabilirsiniz ve oluşturduğu öğelerin yazı tiplerini belirtmek için herhangi bir özel çizim işlevine bir font boyutu iletebilirsiniz. 'font_scale' bunu yapmanın tek yolu değil, aynı anda birçok şeyi değiştirmenin kullanışlı bir yoludur. – mwaskom

+0

Bu soruya cevap vermemekle birlikte, yaklaşımda temel bir değişikliğe değiniyor olabilirsiniz: ['psfrag'] (https://www.ctan.org/pkg/psfrag?lang=en) paketine bakın. Dizeleri olan bir şekildeki karakterleri değiştirmenizi sağlar. – Schorsch

+1

@mwaskom Soruma cevap verdiniz - yazı tipi boyutunu rc ile belirtin. Ancak, denizde doğmuş olmanın güzel olacağını düşündüğüm bir şey, tüm yazı tipi özelliklerine global olarak uygulanan bir font_size belirleyebiliyor. Rc kullanarak, her yazı tipi parametresini ayrı ayrı ayarlamak zorundayım (örneğin, axes.labelsize, legend.fontsize). – kc2uno

cevap

6

Haklısınız. Bu kötü belgelenmiş bir konudur. Ancak, arsa oluşturulduktan hemen sonra yazı tipi boyutu parametresini (yazı tipi ölçeğine karşı) değiştirebilirsiniz.

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() 

, bu sonuçlanır: Aşağıdaki örneği kontrol

Different font sizes for different labels

Ben sadece DPI aynı olduğundan emin olmak için gerek araziler arasında tutarlı yapmak. Bu arada, "font.size" parametresi bulunduğundan, rc dictionaries bir bit özelleştirme olanağı da var; ancak bunu nasıl yapacağınızdan emin değilim.

Not: Ayrıca, neden eksen etiketleri ve keneler için yazı tipi boyutu değişkenlerinin adını değiştirdiklerini gerçekten anlamıyorum. Biraz sezgisel gibi görünüyor.

5

Her şey tatmin edici değil, değil mi? Bu standard komplo kullanım% 90 özen gereken bağlamı ayarlarken Belirtmemeyi bulduk kolay yolu, ör .:

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

. eksenler etiket daha küçük ticklabels İsterseniz, daha küçük (ticklabel) değerine 'axes.labelsize' kurmak ve örneğin elle eksen etiketlerini (ya da diğer özel öğeleri) belirtmek:

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

bir olarak tanımlayabilirsiniz işlevini kullanın ve komut dosyalarınıza yükleyin, böylece standart numaralarınızı hatırlamak zorunda kalmayın ya da her seferinde arayın. Tabii

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

sen configuration files kullanabilirsiniz, ancak ben tüm fikir yukarıda iyi çalışıyor yüzden kolay ve basit bir yöntem, sahip olmaktır sanırım.

Not: Bu sayıları belirtirseniz, sns.set_context numaralı belgede font_scale belirtme, belirtilen tüm yazı tipi öğeleri için onu ayarlamış olsanız bile yok sayılır.

+0

Yayın notu rakamları için bonus uyarısı (sorulmadığından, cevabın bir parçası değil): 'plt.figure' ile' dpi'yi belirtebilirsiniz, ancak 'plt.subplots' ile değil, böylece kaydetirken belirtmeniz gerekir. plt.savefig (dosya adı, dpi = 500) '([burada] (http://stackoverflow.com/questions/34028255/set-height-and-width-of-figure-created-with-plt-subplots-in- matplotlib/37405530 # 37405530)) – TNT