matplotlib 精确控制海运图中的字体大小

mctunoxg  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(173)

我目前正在尝试使用Seborn为我的学术论文创建绘图。绘图看起来很棒,也很容易生成,但我遇到的一个问题是如何对绘图中的字体大小进行精细控制。
我的论文字体大小是9pt,我想确保绘图中的字体大小是9pt或10pt。但在seborn中,字体大小主要通过字体缩放sns.set_context("paper", font_scale=0.9)控制。所以我很难找到正确的字体大小,除非通过反复试验。有没有更有效的方法来做到这一点?
我还想确保不同的海运图之间的字体大小一致。但不是所有海运图都有相同的尺寸,所以似乎在所有图上使用 * 相同的字体比例 * 并不一定会在这些不同的图上创建相同的字体大小。
我在下面附上了我的代码。我非常感谢任何关于如何为两栏学术论文格式化绘图的评论。我的目标是能够控制图形的大小而不扭曲字体大小或绘图。我使用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')
6bc51xsx

6bc51xsx1#

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

import seaborn as sns
import matplotlib.pyplot as plt
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)
plt.show()

,这将导致:

为了使它在绘图之间保持一致,我认为你只需要确保DPI是相同的。顺便说一下,它也是一个可能性,以自定义位的rc dictionaries,因为“字体大小”参数存在,但我不太清楚如何做到这一点。
注意:我也不太明白他们为什么要改变轴标签和刻度的字体大小变量的名称。看起来有点不直观。

bgtovc5b

bgtovc5b2#

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

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

这应该会照顾到90%的标准绘图使用。如果您想要ticklabel小于axes标签,请将'axes.labelsize'设定为较小的(ticklabel)值,并手动指定axis标签(或其他自订元素),例如:

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,所有指定的字体元素都会忽略在sns.set_context中指定font_scale

dbf7pr2w

dbf7pr2w3#

我已经花了太多时间试图找出“paper”sns上下文的实际值。我只能找到它用于“talk”,老实说,我很生气!只打算使用sns.set_context(“paper”,rc{“font.size”:8,“axes.titlesize”:8,“axes.labelsize”:5})
即使这些可能是值!!!

相关问题