Force hintergrund matplotlib Abbildung transparent
Ich versuche, um eine matplotlib Abbildung in einem Python-Gtk3-Anwendung, die ich Schreibe. Ich würde gerne die hintergrund Farbe von der Abbildung transparent, so dass die Figur nur auftaucht, gegen die Natürliche graue hintergrund der Anwendung, aber nichts, was ich bisher ausprobiert habe, scheint zu funktionieren.
Hier ein 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()
Wenn die fig.patch.set_alpha(0.0)
Zeile ist auskommentiert, die Farbe des Hintergrundes ändert nur weiß, statt Grau. Alle Anregungen sehr dankbar!
- sind Sie sicher, dass der hintergrund einer leeren
Gtk.Window
ist nicht standardmäßig weiß auf Ihrer Plattform? dies scheint der Fall bei mir (Unity-desktop). - Nein, das habe ich überprüft und es scheint zu grauen. Ich schaffte es, um das problem mit der
get_style
- Methode des parent-Fenster die Farbe des Hintergrunds und dann legen Sie es als facecolour der Achsen. Es ist keine tolle Lösung, aber es funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es mir, dass es die Achsen im hintergrund, die versteckt werden muß. Sie könnten versuchen, mit
ax.patch.set_facecolor('None')
oderax.patch.set_visible(False)
.Alternativ haben Sie versucht, die Einstellung sowohl die Abbildung und Achsen patches aus? Dies kann erreicht werden durch:
figure.patch.set_visible(False)
funktioniert der trickax.patch.set_visible(False)
undfigure.patch.set_visible(False)
um transparenten hintergrund.Ich löste es auf diese Weise. Es ist nicht ideal, aber es funktioniert.
Einer Kombination von
funktioniert bei mir (selbst ist eine Unterklasse von Canvas).
Jeder der beiden allein nicht funktionieren.