我正在尝试在我正在编写的Python Gtk3应用程序中包含一个matplotlib图。我想将图形的背景颜色设置为透明,这样图形就会显示出应用程序的自然灰色背景,但到目前为止我所尝试的内容似乎都没有用。
这是一个MWE:
from gi.repository import Gtk
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import numpy as np
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
fig, ax = plt.subplots()
#fig.patch.set_alpha(0.0)
x,y = np.array([[0, 1], [0, 0]])
line = mlines.Line2D(x, y, c='#729fcf')
ax.add_line(line)
plt.axis('equal')
plt.axis('off')
fig.tight_layout()
sw = Gtk.ScrolledWindow()
sw.set_border_width(50)
canvas = FigureCanvas(fig)
sw.add_with_viewport(canvas)
layout = Gtk.Grid()
layout.add(sw)
self.add(layout)
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
如果取消注释fig.patch.set_alpha(0.0)
行,则背景颜色只会变为白色而不是灰色。所有建议都非常感谢!
答案 0 :(得分:2)
在我看来,这是需要隐藏的轴背景。您可以尝试使用ax.patch.set_facecolor('None')
或ax.patch.set_visible(False)
。
或者,您是否尝试过关闭图形和轴贴片?这可以通过以下方式实现:
for item in [fig, ax]:
item.patch.set_visible(False)
答案 1 :(得分:1)
我这样解决了。它并不理想,但它确实有效。
from gi.repository import Gtk
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import numpy as np
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
from matplotlib.colors import ColorConverter
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
fig, ax = plt.subplots()
#fig.patch.set_alpha(0.0)
x,y = np.array([[0, 1], [0, 0]])
line = mlines.Line2D(x, y, c='#729fcf')
ax.add_line(line)
plt.axis('equal')
plt.axis('off')
fig.tight_layout()
win = Gtk.Window()
style = win.get_style_context()
bg_colour = style.get_background_color(
Gtk.StateType.NORMAL).to_color().to_floats()
cc = ColorConverter()
cc.to_rgba(bg_colour)
fig.patch.set_facecolor(bg_colour)
sw = Gtk.ScrolledWindow()
sw.set_border_width(50)
canvas = FigureCanvas(fig)
sw.add_with_viewport(canvas)
layout = Gtk.Grid()
layout.add(sw)
self.add(layout)
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
答案 2 :(得分:0)
的组合
fig.patch.set_visible(False)
self.setStyleSheet("background-color:transparent;")
适合我(自我是Canvas的子类)。 这两个中的任何一个都不起作用。