Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

matplotlibのウィンドウを透明化してプロット

やりたいこと

matplotlib の背景を透明化してプロットしたいと思います。

savefig() による図の保存の場合は、こちらの例のように ax.patch.set_alpha(float) を使うことで実現できます。

以下の実装では、plt.show() でディスプレイ表示する場合の透明度設定方法を扱っています。

解決方法

f:id:Kurene:20191028182148p:plain
図1: matplotlibのウィンドウを透明化

ウィンドウの透明化は、matplotlib のバックエンドによって設定する方法が変わります。以下の実装では、よく利用されるバックエンドである Qt5AggTkAgg を使ってみました。

なお、matplotlib.use(backend) でバックエンドを変えることができます。

実装

import numpy as np
import matplotlib as mpl
#mpl.use("TkAgg")

import matplotlib.pyplot as plt


np.random.seed(0)
x = np.random.normal(0.0, 1.0, (2, 500))
plt.clf()
plt.plot(x[0], x[1], 'bo', c="c")

backend = mpl.get_backend()
win = plt.gcf().canvas.manager.window

if backend == 'Qt5Agg':
    win.setWindowOpacity(0.5)
elif backend == 'TkAgg':
    win.lift()
    win.attributes("-topmost", True)
    win.attributes("-transparentcolor", "white")

plt.show()

参考

stackoverflow.com