You need to enable JavaScript to run this app. 如何在pandas.DataFrame.plot()生成的图表中设置标题字号?
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas.DataFrame.plot()生成的图表中设置标题字号?

实现方法

pandas的df.plot()是对matplotlib绘图接口的轻量封装,所有matplotlib支持的样式配置都可以正常集成到这个调用流程里,调整标题字号不需要改写原有绘图逻辑,共有3种适配不同场景的实现方式:

方法1:捕获Axes返回值直接配置(通用无版本依赖)

df.plot()会返回当前图表的matplotlib Axes实例,把返回值保存下来后,就可以直接调用原生方法修改标题样式,和原有绘图参数完全兼容:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(3,3), columns=['A','B','C'])
df['Name'] = ['Lily','Mary','Joan']
# 捕获plot返回的Axes对象
ax = df.plot(
    x='Name', 
    kind='barh', 
    stacked=True, 
    mark_right=True, 
    figsize=(10,6),
    title='Distribution of Tags across Participants'
)
# 自定义标题字号、间距等全部支持的样式
ax.set_title(
    'Distribution of Tags across Participants',
    fontsize=16,
    pad=20
)

这种方式灵活性最高,兼容所有matplotlib支持的标题配置项,不存在pandas版本兼容问题。

方法2:在plot调用时直接传字典配置标题

你之前考虑给title参数传入字典配置的思路完全可行。pandas会把title参数的内容透传给matplotlib的set_title方法,而matplotlib原生支持通过字典结构同时传入标题文本和全部样式参数,不需要把绘图逻辑拆成两步:

df.plot(
    x='Name', 
    kind='barh', 
    stacked=True, 
    mark_right=True, 
    figsize=(10,6),
    title={
        'label': 'Distribution of Tags across Participants',
        'fontsize': 16,
        'fontweight': 'bold'
    }
)

注意:字典结构中必须用label键对应实际显示的标题文本,其余键直接填写matplotlib支持的标题样式参数(字号、颜色、字重等)即可。不要给title传列表格式的配置,matplotlib无法识别这类结构。

方法3:全局统一设置标题字号(适配批量绘图场景)

如果需要为所有生成的图表统一配置标题字号,可以在绘图前通过matplotlib的全局参数一次性设置,后续调用df.plot()生成的图表会自动应用这个配置,不需要单独给每个图设置标题样式:

import matplotlib.pyplot as plt
# 全局配置默认标题字号
plt.rcParams['axes.titlesize'] = 16

df.plot(
    x='Name', 
    kind='barh', 
    stacked=True, 
    mark_right=True, 
    figsize=(10,6),
    title='Distribution of Tags across Participants'
)
注意事项
  • 原有代码中的mark_right是pandas堆叠条形图的专属配置参数,和matplotlib的标题样式配置无冲突,不需要修改或移除。
  • 不需要把整个绘图流程改写为纯matplotlib代码,pandas的封装已经预留了参数透传通道,可以直接集成所有matplotlib的原生能力。

内容的提问来源于stack exchange,提问作者Paw in Data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 10:15:05