直接调用plt.style.use()可全局切换样式,覆盖rcparams大部分视觉参数,推荐在notebook开头设置,如plt.style.use('seaborn-v0_8');恢复默认用plt.style.use('default'),已创建图表不受影响。

怎么用 plt.style.use() 切换全局风格
直接调用 plt.style.use() 就能切换整个 notebook 的默认样式,不需要每次绘图都重复设置。它会覆盖 rcParams 中的大部分视觉参数(比如线条粗细、字体、网格颜色等)。
常见可用风格包括:'seaborn-v0_8'、'ggplot'、'fivethirtyeight'、'dark_background'、'classic'。运行 print(plt.style.available) 可查看你当前环境支持的全部风格。
- 推荐在 notebook 开头一次性设置,例如:
plt.style.use('seaborn-v0_8') - 如果之后想恢复原始默认,用
plt.style.use('default')(不是'classic') - 注意:该设置对后续所有
plt.plot()、plt.hist()等生效,但不会影响已创建的 figure
为什么 plt.rcParams 修改后没效果
手动改 rcParams 有时不生效,大概率是因为 plt.style.use() 已经锁定了部分参数——风格加载后会冻结某些 key,后续对 rcParams 的赋值会被忽略。
比如你写了 plt.rcParams['lines.linewidth'] = 2.5,但之前用了 plt.style.use('ggplot'),那这行就无效。
- 解决办法:要么在
plt.style.use()之前修改rcParams,要么改完风格后再用rcParams覆盖特定项(如plt.rcParams['font.sans-serif'] = ['SimHei']) - 中文乱码、负号显示异常这类问题,必须在
plt.style.use()之后再单独设rcParams,否则风格会把它们重置 -
plt.rcdefaults()可一键恢复 matplotlib 原始默认值,但会清掉你之前所有rcParams设置
怎么让风格只对某张图生效
用上下文管理器 with plt.style.context(),避免污染全局状态,特别适合在同一个 notebook 里混用多种风格。
示例:
with plt.style.context('dark_background'):
plt.plot([1, 2, 3], [1, 4, 2])
plt.title('Dark theme only here')
plt.show() # 这张图是深色背景
plt.plot([1, 2, 3], [3, 1, 4]) # 下一张图恢复默认风格
- 支持传入字符串(单个风格)、列表(叠加多个风格)、或字典(临时覆盖参数)
- 不能嵌套使用多个
with plt.style.context(),外层会覆盖内层 - 如果在 context 内部又调用了
plt.style.use(),会中断上下文作用域
Jupyter Notebook 里风格不刷新怎么办
常见现象:改了 plt.style.use(),但旧 cell 的图还是老样子,新 cell 才生效。这不是 bug,而是 matplotlib 的缓存机制和 notebook 的 cell 执行顺序导致的。
- 已绘制的 figure 不会自动重绘,必须重新运行绘图 cell(或加
plt.clf()/plt.close('all')清空) - 如果用了
%matplotlib inline,style 切换后建议执行一次%matplotlib inline重载 backend - 极少数情况是浏览器缓存了 canvas,硬刷页面(Ctrl+Shift+R)可解决
- 注意:
%matplotlib notebook下 style 切换更敏感,有时需重启 kernel 才彻底生效
真正麻烦的是 style 和 rcParams 的优先级交错,还有中文支持这种“看起来设了但没用”的问题——得先定风格,再补字体,最后画图,顺序错了就得重来。











