强制Matplotlib图形背景透明 [英] Force background of matplotlib figure to be transparent

查看:199
本文介绍了强制Matplotlib图形背景透明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我正在编写的Python Gtk3应用程序中包含一个matplotlib图形.我想将图形的背景色设置为透明,以使图形仅在应用程序的自然灰色背景下显示,但是到目前为止我没有尝试过.

这是MWE:

从gi.repository导入

  Gtk导入matplotlib.pyplot作为plt将matplotlib.lines导入为mlines将numpy导入为np从matplotlib.backends.backend_gtk3agg导入FigureCanvasGTK3Agg作为FigureCanvas类MyWindow(Gtk.Window):def __init __():Gtk.Window .__ init __(自己)无花果,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(行)plt.axis('等于')plt.axis('off')fig.tight_layout()sw = Gtk.ScrolledWindow()sw.set_border_width(50)canvas = FigureCanvas(图)sw.add_with_viewport(画布)布局= Gtk.Grid()layout.add(sw)self.add(layout)赢= MyWindow()win.connect(删除事件",Gtk.main_quit)win.show_all()Gtk.main() 

如果未注释 fig.patch.set_alpha(0.0)行,则背景颜色只会变为白色,而不是灰色.所有建议,不胜感激!

解决方案

我是通过这种方式解决的.这不是理想的方法,但是可行.

从gi.repository导入

  Gtk导入matplotlib.pyplot作为plt将matplotlib.lines导入为mlines将numpy导入为np从matplotlib.backends.backend_gtk3agg导入FigureCanvasGTK3Agg作为FigureCanvas从matplotlib.colors导入ColorConverter类MyWindow(Gtk.Window):def __init __():Gtk.Window .__ init __(自己)无花果,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(行)plt.axis('等于')plt.axis('off')fig.tight_layout()胜利= Gtk.Window()样式= 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(图)sw.add_with_viewport(画布)布局= Gtk.Grid()layout.add(sw)self.add(layout)赢= MyWindow()win.connect(删除事件",Gtk.main_quit)win.show_all()Gtk.main() 

I'm trying to include a matplotlib figure in a Python Gtk3 application I'm writing. I'd like to set the background colour of the figure to be transparent, so that the figure just shows up against the natural grey background of the application, but nothing I've tried so far seems to be working.

Here's an 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()

If the fig.patch.set_alpha(0.0) line is uncommented, the colour of the background just changes to white, rather than grey. All suggestions greatly appreciated!

解决方案

I solved it this way. It's not ideal, but it works.

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()

这篇关于强制Matplotlib图形背景透明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆