【问题标题】:Transparent inline matplotlibs in IPythonIPython中的透明内联matplotlibs
【发布时间】:2026-01-06 23:55:01
【问题描述】:

我希望我的 matplotlib 绘图的背景在我的 IPython 笔记本中是透明的。这可能听起来很傻,因为笔记本本身默认为白色背景,但是:

1) 我使用日晒背景和

2) 更重要的是,当我通过 nbconvert 将笔记本直接嵌入我的博客时,我希望它们是透明的。

使用 savefig('file', transparent=True) 之类的东西很容易,但我没有保存数字,而是内联显示它们(通过使用 ipython notebook --matplotlib inline 调用 IPython。

我一直在使用 IPython 笔记本配置文件,尤其是 c.InlineBackend.rc。例如,我升级到 matplotlib 的开发版本以访问其新的savefig.transparent rcParam,并尝试使用c.InlineBackend.rc = {'savefig.transparent': True} 对其进行配置,但正如预期的那样,它只会影响使用savefig 保存的绘图。

请注意,我使用的是最新的 IPython 2.0 版本。这一定是可能的不知何故,对吧?您能提供的任何启发都将不胜感激。

【问题讨论】:

  • 这些数字是通过直接嵌入在 html 中的 png 来显示的。您正在保存数据,ipython 只是对您隐藏它。您可能必须深入研究 ipython 代码才能找到保存位置并添加传递参数的功能。
  • 我觉得你的第二种方法应该可行(设置 ipython rc 参数)。
  • @tillsten,我怀疑这意味着 IPython 在使用 matplotlib 内联时不会直接调用 savefig。也许它正在使用一些较低级别的功能?我会四处寻找并尝试找出答案,但希望对这些事情有更多了解的人知道他们的头脑。
  • 我在ipython github页面上发布了一个问题,也许他们知道更多。我尝试了所有我能想到的方法(图形构造函数、rcparmas、ipython 配置),但无法设置为图形 facecolor。

标签: matplotlib ipython ipython-notebook


【解决方案1】:

为了跟进,tillsten 在 Github 上打开的问题已被修补,如下所示:

rcParams['figure.facecolor'] = (0,0,0,0)

更新 IPython 后现在应该可以工作了。为开源欢呼三声。

【讨论】:

    【解决方案2】:

    内联图是 html 对象 (<img>),类为 ui-resizable。因此,您可以通过自定义笔记本的 CSS 来更改它们的默认行为:

    1. 找到您的笔记本设置:在终端中,键入

      ipython locate
      
    2. 在指示的目录中,转到子目录profile_default\static\custom(或您想使用的任何配置文件)

    3. 编辑或创建一个名为custom.css的CSS文件

    4. 把这个放进去:

      img.ui-resizable
      {
      opacity:0.4;
      }
      

    关闭您的笔记本,终止 IPython 并重新启动它(以便它重新创建提供的文件)。

    它应该适用于导出的笔记本,只要您将它们导出为 html 并在那里更改 css。

    这不是您想要的,但它确实可以完成工作。

    【讨论】:

    • 不幸的是,这根本不是我想要的。这会使整个图像(包括内容)透明,并且不会更改白色背景。
    • 当然,我现在明白你只希望 背景 是(完全)透明的。