Jupyter Notebook 本身并没有把深色模式做成一键开关,很多人第一反应是改 CSS 或装浏览器插件,但这类办法往往只改了界面颜色,代码输出和 matplotlib 图表未必跟着正常显示。更稳妥的路线是直接用 jupyter-themes 管理主题:先确认可用主题,再用 jt 命令启用,最后处理重启和缓存这两个最容易遗漏的环节,这样基本能判断主题为什么没生效、图表为什么会发黑。
为什么推荐用 jupyter-themes
如果目标是给 Jupyter Notebook 切换深色背景,同时尽量让界面、代码单元和图形输出保持一致,jupyter-themes 依然是最直接的一套方案。它不需要手动改 CSS 文件,也不依赖浏览器插件,安装后直接通过 jt 命令应用主题。
更重要的是,这种方式对输出内容也更友好,包括常见的 matplotlib 图表。相比只改浏览器外观的做法,它的稳定性更高,排查问题也更集中,通常只需要关注主题本身、Jupyter 重启和浏览器缓存三个点。
安装并查看可用深色主题
正式切换前,先确保 jupyter-themes 已安装,并尽量使用较新的版本。

pip install jupyterthemes
或者使用 Conda:
conda install -c conda-forge jupyterthemes
安装完成后,可以先查看当前支持的主题列表:
jt -l
常见可用的深色主题包括:gruvboxd、oceans16、monokai、onedork、solarizedd、chesterish。
如果你更在意图表显示的完整性,优先考虑 gruvboxd 和 oceans16。这两个主题对图表边框的兼容性通常更好。相比之下,monokai 的语法高亮对比更强,但在 matplotlib 默认配置下,图表边框可能发黑,后面还需要额外修一下颜色。
应用深色主题并处理显示问题
选定主题后,直接用 jt 命令启用即可。一个比较稳妥的示例如下:
jt -t oceans16 -fs 12 -cellw 90% -T -N
这条命令里几个参数分别对应不同设置:
-t oceans16:启用oceans16深色主题。这个主题是比较常见的选择,深蓝底色下图表边框默认更容易保留。-fs 12:把代码字体大小设为 12。过小容易费眼,过大又会明显挤占单元格空间。-cellw 90%:把单元格宽度控制在 90%,可以减少长代码排版混乱或换行过多的问题。-T:显示工具栏。-N:显示 notebook 名称,开多个标签页时更容易辨认。
命令执行完之后,关键动作不是普通刷新页面,而是重启 Jupyter。如果只是在浏览器里刷新,很可能看不到任何变化,于是误以为命令没有生效。
另一个常见问题是:切成深色主题后,图表坐标轴或刻度突然看不清。多数情况下,这是主题把 plt 的 tick 颜色设成了黑色。这时可以在 notebook 里补上一行:
plt.tick_params(color='w', labelcolor='w')
如果你主要依赖 matplotlib 作图,这一步尤其值得记住。它不是安装问题,而是主题和默认绘图样式之间的颜色冲突。
如何恢复默认或临时切换
如果深色主题不合适,或者只是想试几个风格,不需要手动删配置文件,直接用命令回退就可以:
jt -r
这条命令会还原相关 CSS 修改,并清理缓存设置。但在实际使用中,浏览器仍可能继续使用旧样式,所以建议再做一次硬刷新,例如 Ctrl+Shift+R。
如果只是临时看看其他主题长什么样,也可以直接切过去,例如:
jt -t monokai
不满意时再执行 jt -r 回退即可。原文中的经验是,这种临时切换不需要重启服务,适合快速预览不同主题效果。
主题没生效时先检查这两步
很多人装完 jupyter-themes 后觉得“命令没反应”,其实问题往往不在安装本身,而在两个很容易漏掉的环节:是否重启了 Jupyter,以及浏览器缓存是否已经清掉。

可以把排查顺序简单记成下面这套:
- 先确认主题命令已经执行,比如
jt -t oceans16 -fs 12 -cellw 90% -T -N; - 然后重启 Jupyter,而不是只刷新当前页面;
- 如果样式仍旧不对,再做一次浏览器硬刷新,例如
Ctrl+Shift+R; - 若只是图表颜色异常,再单独检查
matplotlib的 tick 与边框颜色。
实际使用里,前两步往往决定了大多数结果。换句话说,深色主题是否真正生效,关键不只是“装了没有”,而是“重启了没有、缓存清了没有”。把这两个点处理到位,Jupyter Notebook 的深色模式通常就能稳定用起来。













