2016-03-25 10 views
8

私は現在、Seabornを使用して学術論文のプロットを作成しようとしています。プロットは大きくて見やすく見えますが、私が問題を抱えている問題の1つは、プロット内のフォントサイズを細かく制御することです。学術論文のSeabornプロットのフォントサイズを細かく制御

私の論文のフォントサイズは9ptで、私のプロットのフォントサイズは9ptか10ptのどちらかであることを確認したいと思います。しかし海底では、フォントサイズは主にフォントスケールsns.set_context("paper", font_scale=0.9)によって制御されます。それで、試行錯誤以外の正しいフォントサイズを見つけるのは難しいです。これを行うより効率的な方法はありますか?

フォントサイズが異なる海軍プロット間で一貫していることを確認したいと思います。しかし、すべての私の海軍のプロットは同じ次元を持っているわけではないので、同じfont_scaleをすべてのプロットで使用しても、必ずしもこれらの異なるプロット間で同じフォントサイズを作成するとは限りません。

以下に自分のコードを添付しました。 2列の学術論文のプロットをどのようにフォーマットするかについてのコメントは感謝しています。私の目標は、フォントサイズやプロットを歪ませずに、Figureのサイズを制御できるようにすることです。私はラテックスを使って自分の論文を書いています。

# 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

私はあなたの質問がここに何であるかはよく分かりません。さまざまなフォント関連のrcパラメータにフォントサイズを指定してデフォルトを変更することができます。また、特定のプロット関数にフォントサイズを渡して、作成中の要素のフォントを指定することもできます。 'font_scale'はそれを行う唯一の方法ではなく、一度に多くのものを変更する便利な方法です。 – mwaskom

+0

この質問には答えていませんが、アプローチの根本的な変更に対処しているかもしれません:['psfrag'](https://www.ctan.org/pkg/psfrag?lang=ja)パッケージを見てください。 Figure内の文字を文字列で置き換えることができます。 – Schorsch

+1

@mwaskomあなたは私の質問に答えました - rcを通してフォントサイズを指定してください。しかし、私がシーボーンで持つのがいいと思うことは、すべてのフォントプロパティにグローバルに適用されるfont_sizeを指定できることです。 rcを使用するので、各フォントパラメータ(例えば、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

私はあなただけのDPIが同じであることを確認する必要があると思うのプロットの間で、それは一貫性を持たせるに。ところで、 "font.size"パラメータが存在するので、rc dictionariesビットをカスタマイズすることも可能ですが、その方法はあまり分かりません。

注:なぜ軸ラベルとティックのフォントサイズ変数の名前を変更したのかもわかりません。少し直感的ではないようです。

5

これはすべて満足していますか?

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

これは、標準プロットの使用率の90%を処理する必要があります。たとえば、コンテキストを設定するときに指定する最も簡単な方法は次のとおりです。あなたがしたい場合たとえば、軸ラベルよりも小さいが、手動で小さく(ticklabel)の値に「axes.labelsize」を設定し、軸ラベル(またはその他のカスタム要素)を指定ticklabels:

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に指定しても無視されます。

+0

パブリケーショングレードの数字のボーナス警告(答えられないので、答えの一部ではない): 'plt.subplots 'ではなく' plt.figure'で 'dpi'を指定することができるので、 plt.savefig(ファイル名、dpi = 500) '([ここ](http://stackoverflow.com/questions/34028255/set-height-and-width-of-figure-created-with-plt-subplots-in- matplotlib/37405530#37405530)) – TNT

関連する問題