matplotlib 如何使用sns.set和rcParams更改所有子图的字体大小

fruv7luv  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(172)

我正在尝试更改一系列箱线图中的所有字体元素。我的代码类似于

from pathlib import Path
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

def plot_group(df, nrow, ncol, size, plot_title):

    sns.set(style="darkgrid")
    plt.rcParams['font.size'] = size
    fig, axes = plt.subplots(nrow, ncol, figsize=(15, 10), tight_layout=True)
    fig.suptitle(plot_title)
    n_boxplots = 2
    for i in range(nrow):  
        for j in range(ncol): 
            current_ax = axes[i, j]
            sns.boxplot(data=df[['foo','bar']], palette="Set2", ax=current_ax)
            current_ax.set_title("foo", fontsize=18)

    plt.savefig(f'font_size_{size}.png', dpi=75)
    plt.close(fig)

nrow = 3
ncol = 3
rng = np.random.default_rng(0)
arr = rng.random((30, 2))
df = pd.DataFrame(data=arr, columns=['foo', 'bar'])
for size in [14, 22]:

    plot_title = f"Font size = {size}"
    plot_group(df, nrow, ncol, size, plot_title)

然而,这会导致两个数字,其中只有suptitle字体大小发生变化,但其他一切保持不变:

为什么?我该怎么弥补?

xoefb8l8

xoefb8l81#

  • 有许多答案处理sns.setsns.set_stylercParams
  • seaborn rc parameters for set_context and set_style
  • Seaborn cannot override grid.linewidth
  • 如seaborn rcmod.py文件所示,seaborn函数已经设置了rcParms
  • .set.set_theme的别名
  • 使用此处定义的参数覆盖.set_theme设置的rcParams
  • _context_keys_style_keys
  • 对于此代码,删除sns.set(style="darkgrid")plt.rcParams['font.size'] = size,改用sns.set_theme(context={'font.size': size})
  • 直接使用rcParams,当使用sns.set_theme时,似乎不起作用。
    *python 3.11.2matplotlib 3.7.1seaborn 0.12.2中测试
def plot_group(df, nrow, ncol, size, plot_title):

    sns.set_theme(context={'font.size': size})  # use set_theme
    
    fig, axes = plt.subplots(nrow, ncol, figsize=(15, 10))
    axes = axes.flat
    fig.suptitle(plot_title)
    for ax in axes:
        sns.boxplot(data=df, palette="Set2", ax=ax)
        ax.set_title("foo", fontsize=18)

    plt.savefig(f'font_size_{size}.png', dpi=75)
    plt.close(fig)

nrow = 3
ncol = 3
rng = np.random.default_rng(0)
arr = rng.random((30, 2))
df = pd.DataFrame(data=arr, columns=['foo', 'bar'])
for size in [14, 22]:
    plot_title = f"Font size = {size}"
    plot_group(df, nrow, ncol, size, plot_title)

相关问题