6

我正在尝试在我正在编写的 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)行未注释,则背景颜色将变为白色,而不是灰色。非常感谢所有建议!

4

3 回答 3

3

在我看来,需要隐藏的是轴背景。您可以尝试使用ax.patch.set_facecolor('None')or ax.patch.set_visible(False)

或者,您是否尝试过同时关闭图形和坐标轴补丁?这可以通过以下方式实现:

for item in [fig, ax]:
    item.patch.set_visible(False) 
于 2013-10-09T07:07:53.273 回答
2

我是这样解决的。这并不理想,但它有效。

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()
于 2013-10-17T21:55:44.180 回答
0

的组合

fig.patch.set_visible(False)
self.setStyleSheet("background-color:transparent;")

为我工作(self 是 Canvas 的子类)。仅这两个中的任何一个都不起作用。

于 2018-03-28T12:20:58.393 回答