精确控制学术论文的Seaborn图中的字体大小

kc2*_*uno 21 python plot matplotlib seaborn

我目前正在尝试使用Seaborn为我的学术论文创建情节.这些图看起来很棒且易于生成,但是我遇到的一个问题是对图中的字体大小进行了精细控制.

我的论文中的字体大小为9pt,我想确保我的图中的字体大小为9pt或10pt.但在seaborn中,字体大小主要通过字体缩放来控制sns.set_context("paper", font_scale=0.9).所以除了通过反复试验之外,我很难找到合适的字体大小.有没有更有效的方法来做到这一点?

我还想确保不同的seaborn图之间的字体大小是一致的.但并非所有的seaborn图都具有相同的尺寸,所以看起来在所有图上使用相同的font_scale并不一定会在这些不同的图上创建相同的字体大小?

我在下面附上了我的代码.我很感激有关如何为两栏学术论文格式化图表的任何评论.我的目标是能够控制图形的大小而不会扭曲字体大小或图形.我用Latex写论文.

# 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')                                          
Run Code Online (Sandbox Code Playgroud)

arm*_*ita 29

你是对的.这是一个记录严重的问题.但是,您可以在构建绘图后直接更改字体大小参数(与字体比例相反).请检查以下示例:

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()
Run Code Online (Sandbox Code Playgroud)

,结果如下:

不同标签的不同字体大小

为了使图表之间保持一致,我认为你只需要确保DPI是相同的.顺便说一句,它也有可能自定义rc字典,因为"font.size"参数存在,但我不太清楚如何做到这一点.

注意:我也不明白他们为什么更改了轴标签和刻度的字体大小变量的名称.似乎有点不直观.


TNT*_*TNT 15

这几乎令人满意,不是吗?我在设置上下文时指定的最简单方法,例如:

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

这应该照顾90%的标准绘图用法.如果您希望ticklabels小于轴标签,请将'axes.labelsize'设置为较小(ticklabel)值并手动指定轴标签(或其他自定义元素),例如:

axs.set_ylabel('mylabel',size=6)
Run Code Online (Sandbox Code Playgroud)

您可以将其定义为函数并将其加载到脚本中,这样您就不必记住标准数字,也不必每次都调用它.

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

当然你可以使用配置文件,但我想整个想法是有一个简单,直接的方法,这就是为什么上述工作正常.

注意:如果您指定这些数字,指定font_scalesns.set_context所有指定的字体的元素将被忽略,即使你设置它.

  • 发布等级数字的奖励警告(没有问,所以不是答案的一部分):您可以使用`plt.figure`指定`dpi`,但不能使用`plt.subplots`指定,所以你必须在保存`plt时指定它.savefig(filename,dpi = 500)`([这里](http://stackoverflow.com/questions/34028255/set-height-and-width-of-figure-created-with-plt-subplots-in-matplotlib/37405530#37405530)) (3认同)
  • 这就是我使用的:`def defaultPlotting():sns.set(rc = {'figure.figsize':( 11.7,8.27),“ font.size”:20,“ axes.titlesize”:20,“轴。 labelsize“:20},style =” white“)` (3认同)