2013-10-08 12 views
5

मैं लिख रहा हूं कि एक पायथन Gtk3 अनुप्रयोग में एक matplotlib आंकड़ा शामिल करने की कोशिश कर रहा हूँ। मैं आकृति के पृष्ठभूमि रंग को पारदर्शी होने के लिए सेट करना चाहता हूं, ताकि यह आंकड़ा एप्लिकेशन की प्राकृतिक भूरे रंग की पृष्ठभूमि के खिलाफ दिखाई दे, लेकिन अब तक मैंने जो भी प्रयास नहीं किया है, वह काम कर रहा है।matplotlib आकृति की बल पृष्ठभूमि पारदर्शी होने के लिए

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) लाइन uncommented है, पृष्ठभूमि का रंग केवल सफेद करने के लिए बदल जाता है, बल्कि ग्रे से:

यहाँ एक मेगावाट है। सभी सुझावों की बहुत सराहना की!

+0

क्या आप सुनिश्चित हैं कि खाली 'Gtk.Window' की पृष्ठभूमि डिफ़ॉल्ट रूप से आपके प्लेटफ़ॉर्म पर सफेद नहीं है? यह मेरे लिए मामला है (एकता डेस्कटॉप)। –

+0

नहीं, मैंने चेक किया और यह ग्रे लगता है। मैं पृष्ठभूमि रंग प्राप्त करने के लिए पैरेंट विंडो की 'get_style' विधि का उपयोग करके समस्या को हल करने में कामयाब रहा और फिर इसे अक्ष के चेहरे के रूप में सेट किया। यह एक अच्छा समाधान नहीं है, लेकिन यह काम करता है। – Donagh

उत्तर

2

ऐसा लगता है कि यह धुरी पृष्ठभूमि है जिसे छिपाने की जरूरत है। आप ax.patch.set_facecolor('None') या ax.patch.set_visible(False) का उपयोग करने का प्रयास कर सकते हैं।

वैकल्पिक रूप से, क्या आपने आकृति और अक्ष दोनों पैच को बंद करने की कोशिश की है? यह द्वारा पूरा किया जा सकता है:

for item in [fig, ax]: 
    item.patch.set_visible(False) 
+0

दुर्भाग्य से मेरे लिए काम न करें। क्या आप पुष्टि कर सकते हैं कि यह निश्चित रूप से आपकी मशीन पर काम कर रहा है? – Donagh

+0

कम से कम एक नियमित आकृति पर, दोनों तरीकों से अक्ष अक्ष पैच का रंग हटा दें। जीटीके बैकएंड से संबंधित उपलब्ध मॉड्यूल की कमी के कारण, मैं आपके एमडब्ल्यूई का परीक्षण नहीं कर सकता। – spinup

+0

हम्म ... मेरे सिस्टम पर, दोनों ने पृष्ठभूमि रंग को सफेद पर सेट किया। मैंने नीचे अपना समाधान पोस्ट किया। यह सार्वभौमिक नहीं है, लेकिन यह मेरे लिए काम करता है। – Donagh

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() 
संबंधित मुद्दे