2012-07-02 13 views
13

जब मैं matplotlib का उपयोग कर एक आकृति खींचता हूं तो मैं अतिरिक्त मार्जिन के बिना इसे कैसे सहेज सकता हूं? आमतौर पर जब मैं के रूप मेंमार्जिन के बिना matplotlib/networkx आकृति को सहेजना

plt.savefig("figure.png") # or .pdf 

इसे बचा मैं इसे कुछ मार्जिन के साथ मिलती है:

enter image description here

उदाहरण:

import matplotlib.pyplot as plt 
import networkx as nx 

G=nx.Graph() 

G.add_edge('a','b',weight=1) 
G.add_edge('a','c',weight=1) 
G.add_edge('a','d',weight=1) 
G.add_edge('a','e',weight=1) 
G.add_edge('a','f',weight=1) 
G.add_edge('a','g',weight=1) 

pos=nx.spring_layout(G) 
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75') 

nx.draw_networkx_edges(G,pos, 
       width=2,edge_color='b') 

plt.axis('off') 
plt.savefig("degree.png", bbox_inches="tight") 
plt.show() 

अद्यतन 2:

रिक्त स्थान अक्ष के अंदर सेट हैं .. यह स्पष्ट है कि अगर मैं plt.axis('off')
हटा देता हूं तो मुझे लगता है कि पैकेज नेटवर्क के साथ उपयोग करने के लिए कुछ चाल है।

उत्तर

8

नीचे कोड जोड़ से पहले साजिश सीमा को नियंत्रित करने के बचत।

cut के विभिन्न मानों को आजमाएं, जैसे कि आप फिट बैठते हैं, 1.05 से 1.50 तक।

# adjust the plot limits 
cut = 1.05 
xmax= cut*max(xx for xx,yy in pos.values()) 
ymax= cut*max(yy for xx,yy in pos.values()) 
plt.xlim(0,xmax) 
plt.ylim(0,ymax) 
+0

बहुत बहुत धन्यवाद। यह काम करता है लेकिन आंकड़े की सीमा के कुछ छोटे हिस्से को हटाने के साथ। मुझे आंकड़ा पूरा नहीं हुआ है।तो मुझे लगता है कि मुझे इसे किसी भी तरह संशोधित करने की जरूरत है। – Aya

+2

आप एक अधिक रूढ़िवादी कट (1.02 के बजाय 1.10 या 1.05) का प्रयास कर सकते हैं, कैनवास फिट होने तक बस इसे बदलें। – nye17

+0

मैं अभी भी एक और तरीका पसंद करूंगा जो सीमाओं को स्वचालित रूप से ठीक करे। मुझे लगता है कि यह नोड आकार – Aya

9

plt.savefig("figure.png", bbox_inches="tight") आज़माएं।

संपादित करें: आह, आपने उल्लेख नहीं किया कि आप नेटवर्कएक्स का उपयोग कर रहे थे (हालांकि अब मुझे लगता है कि यह एक टैग में सूचीबद्ध है)। bbox_inches="tight" आंकड़े को कसकर फसल करने का तरीका है। मुझे नहीं पता कि नेटवर्कक्स क्या कर रहा है, लेकिन मुझे लगता है कि यह कुछ साजिश पैरामीटर सेट कर रहा है जो अक्षों में अतिरिक्त स्थान जोड़ रहे हैं। आपको matplotlib की बजाय नेटवर्कक्स में समाधान की तलाश करनी चाहिए। (यह हो सकता है, उदाहरण के लिए, कि networkx अंतरिक्ष कुल्हाड़ियों अंदर, आंकड़ा नहीं जोड़ने सकता है है; यह कैसा दिखता है अगर आपको लगता है कि axis('off') कॉल निकालना चाहते हैं?)

+0

यह वास्तव में मार्जिन को नहीं बदलता है। धन्यवाद – Aya

+0

क्या आप "मार्जिन" से क्या मतलब है इसका एक उदाहरण दे सकते हैं? – BrenBarn

+0

धन्यवाद। मैं नहीं चाहता कि आंकड़ा अतिरिक्त सफेद रिक्त स्थान से बचाया जाए। मैं सिर्फ सीमाओं को आंकड़े की सीमा को बंद करना चाहता हूं। क्या यह स्पष्ट है? – Aya

0
networkx की बारीकियों को जानने के बिना

मुझे विश्वास है कि यह काम करेगा नहीं किया जा सकता है, लेकिन matplotlib में एक कुल्हाड़ियों के बाहर से पूरी तरह से सफेद स्थान को निकालना है, तो आप की तर्ज पर कुछ कर सकते हैं:

import matplotlib.pyplot as plt 
ax = plt.axes([0, 0, 1, 1]) 
plt.plot(range(10)) 
0

एक हैक का थोड़ा सा, लेकिन यदि आप nx.draw का उपयोग करते हैं, तो यह एक कठिन फिट करता है।

तो तुम

nx.draw(G,pos,node_size=1200,node_shape='o',node_color='0.75', edgelist = []) 

जो सिर्फ नोड्स और कोई किनारों ड्रॉ कर सकता है। तो

nx.draw_networkx_edges(G, pos, width=2, edge_color='b') 
संबंधित मुद्दे