如何在Jupyter笔记本中以透明背景显示matplotlib图形?

问题描述 投票:0回答:1

虽然可以在 Jupyter 控制台中渲染具有透明背景的内联图形,但我无法在 Jupyter Notebook 中将图形背景设置为透明。

为什么?有什么想法吗?

请参阅下面的最小可重现示例。


创建透明 matplotlib 图形的代码

%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(facecolor="#00FF0000")
ax = fig.add_axes([0, 0, 1, 1], facecolor="#FF000000")
plt.plot(range(10), [x**2 for x in range(10)])

它可以在 Jupyter 控制台中运行。

jupyter qtconsole --style monokai

但它在 Jupyter 笔记本中不起作用(在 VS Code 中测试)

python matplotlib jupyter-notebook background jupyter
1个回答
1
投票

虽然不透明,但在 Jupyter 中添加此行可以设置颜色以更好地匹配您在 qtconsole 中看到的内容:

fig.patch.set_facecolor([0.08, 0.08 , 0.08, 1]); # based on https://stackoverflow.com/q/61891800/8508004;

OP 的示例代码(几乎*)将其合并到 JupyterLab 4.1 中,并打开主题“JupyterLab Dark”:

%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(facecolor="#00FF0000")
ax = fig.add_axes([0, 0, 1, 1], facecolor="#FF000000", frame_on=True)
plt.plot(range(10), [x**2 for x in range(10)])
fig.patch.set_facecolor([0.08, 0.08 , 0.08, 1]); # based on https://stackoverflow.com/q/61891800/8508004;
#fig.patch.set_alpha(1.0); # based on https://stackoverflow.com/a/4708018/8508004

可以通过定义书脊、刻度线和标签的颜色来进一步修改,以使其他部分更好地显示,如下所示:

%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(facecolor="#00FF0000")
ax = fig.add_axes([0, 0, 1, 1], facecolor="#FF000000", frame_on=True)
plt.plot(range(10), [x**2 for x in range(10)])
fig.patch.set_facecolor([0.08, 0.08 , 0.08, 1]); # based on https://stackoverflow.com/q/61891800/8508004;
#fig.patch.set_alpha(1.0); # based on https://stackoverflow.com/a/4708018/8508004
ax.spines['bottom'].set_color('#dddddd') # based on https://stackoverflow.com/a/51850717/8508004
ax.spines['top'].set_color('#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.spines['right'].set_color('#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.spines['left'].set_color('#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.tick_params(axis='x', colors='#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.tick_params(axis='y', colors='#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.yaxis.label.set_color('#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004
ax.xaxis.label.set_color('#dddddd')  # based on https://stackoverflow.com/a/51850717/8508004


*注意,我离开了

frame_on = True
,因为我认为
False
与 OP 在屏幕截图中显示的内容不匹配。您的里程可能会有所不同,所以也许您想像OP一样尝试
frame_on=False

© www.soinside.com 2019 - 2024. All rights reserved.