2011-09-23 16 views
60

मैं matplot के साथ शुरू किया और कुछ बुनियादी भूखंडों प्रबंधित किया है, लेकिन अब मैं यह मुश्किल है कि कैसे कुछ सामान मैं अब :(matplotlib - वैश्विक कथा और शीर्षक एक तरफ subplots

मेरे वास्तविक सवाल यह है कि है की जरूरत है ऐसा करने के लिए खोज करने के लिए लगता है सबप्लॉट्स के साथ एक आंकड़े पर वैश्विक शीर्षक और वैश्विक किंवदंती रखने के लिए।

मैं 2x3 सबप्लॉट कर रहा हूं जहां मेरे पास विभिन्न रंगों (लगभग 200) में बहुत सारे ग्राफ हैं। उनमें से अधिकतर (मुझे) अलग करने के लिए मैंने कुछ लिखा

def style(i, total): 
    return dict(color=jet(i/total), 
       linestyle=["-", "--", "-.", ":"][i%4], 
       marker=["+", "*", "1", "2", "3", "4", "s"][i%7]) 

fig=plt.figure() 
p0=fig.add_subplot(321) 
for i, y in enumerate(data): 
    p0.plot(x, trans0(y), "-", label=i, **style(i, total)) 
# and more subplots with other transN functions 

(इस पर कोई विचार? :)) प्रत्येक सबप्लॉट एक ही शैली समारोह है।

अब मैं सब subplots और यह भी एक वैश्विक कथा जो सभी शैलियों बताते हैं के लिए एक वैश्विक शीर्षक प्राप्त करने के लिए कोशिश कर रहा हूँ। इसके अलावा, मैं फ़ॉन्ट छोटे वहाँ पर सभी 200 शैलियों फिट करने के लिए बनाने की जरूरत है (मैं पूरी तरह से अनूठी शैली की जरूरत नहीं है, लेकिन कम से कम कुछ प्रयास)

किसी ने मुझे इस कार्य को सुलझाने में मदद कर सकते हैं?

+1

वैश्विक शीर्षक: http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html –

उत्तर

112

वैश्विक शीर्षक: matplotlib के नए रिलीज में एक Figure.suptitle() उपयोग कर सकते हैं।

from pylab import * 
fig = gcf() 
fig.suptitle("Title centered above all subplots", fontsize=14) 
+33

इस तरह आयात करने वालों के लिए यहाँ OOP शैली में एक मेगावाट है : 'plt' के रूप में matplotlib.pyplot आयात करें, कमांड को 'plt.figure() के रूप में दर्ज किया जा सकता है; plt.suptitle ('शीर्षक सभी सबप्लॉट्स से ऊपर केंद्रित'); plt.subplot (231); plt.plot (डेटा [:, 0], डेटा [:, 1]); 'आदि ... –

+0

धन्यवाद। यह वास्तविक चयनित उत्तर होना चाहिए। – gustafbstrom

7

कथा लेबल के लिए नीचे की तरह कुछ का उपयोग कर सकते हैं। Legendlabels साजिश लाइनों बचाया जाता है। modFreq हैं जहां साजिश रेखाओं के अनुरूप वास्तविक लेबल का नाम है। फिर तीसरा पैरामीटर पौराणिक कथाओं का स्थान है। अंत में, आप यहां दिए गए किसी भी तर्क में गुजर सकते हैं लेकिन मुख्य रूप से पहले तीन की आवश्यकता है। साथ ही, यदि आप साजिश कमांड में लेबल को सही ढंग से सेट करते हैं तो आपको लगता है। केवल स्थान पैरामीटर के साथ किंवदंती को कॉल करने के लिए और यह प्रत्येक पंक्ति में लेबल पाता है। मेरे पास अपनी खुद की किंवदंती को नीचे की तरह बेहतर भाग्य मिला है। ऐसा लगता है कि उन सभी मामलों में काम करना प्रतीत होता है जहां कभी भी दूसरी तरफ ठीक से नहीं लग रहा था। आप समझ में नहीं आता है, तो मुझे पता है:

legendLabels = [] 
for i in range(modSize): 
    legendLabels.append(ax.plot(x,hstack((array([0]),actSum[j,semi,i,semi])), color=plotColor[i%8], dashes=dashes[i%4])[0]) #linestyle=dashs[i%4]  
legArgs = dict(title='AM Templates (Hz)',bbox_to_anchor=[.4,1.05],borderpad=0.1,labelspacing=0,handlelength=1.8,handletextpad=0.05,frameon=False,ncol=4, columnspacing=0.02) #ncol,numpoints,columnspacing,title,bbox_transform,prop 
leg = ax.legend(tuple(legendLabels),tuple(modFreq),'upper center',**legArgs) 
leg.get_title().set_fontsize(tick_size) 

तुम भी पैर का उपयोग कर सकते fontsizes या कथा का लगभग किसी भी पैरामीटर को बदलने के लिए।

वैश्विक रूप में ऊपर टिप्पणी में कहा गया शीर्षक दिए गए लिंक प्रति पाठ जोड़ने के साथ किया जा सकता है: http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html

f.text(0.5,0.975,'The new formatter, default settings',horizontalalignment='center', 
     verticalalignment='top') 
3

suptitle जाने का रास्ता लगता है, लेकिन क्या इसके लायक है के लिए, figure एक transFigure संपत्ति है कि आप उपयोग कर सकते हैं:

fig=figure(1) 
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center') 
20

orbeckst answer के अलावा एक भी शिफ्ट करने के लिए चाहते हो सकता है नीचे subplots।

import matplotlib.pyplot as plt 

fig = plt.figure() 
st = fig.suptitle("suptitle", fontsize="x-large") 

ax1 = fig.add_subplot(311) 
ax1.plot([1,2,3]) 
ax1.set_title("ax1") 

ax2 = fig.add_subplot(312) 
ax2.plot([1,2,3]) 
ax2.set_title("ax2") 

ax3 = fig.add_subplot(313) 
ax3.plot([1,2,3]) 
ax3.set_title("ax3") 

fig.tight_layout() 

# shift subplots down: 
st.set_y(0.95) 
fig.subplots_adjust(top=0.85) 

fig.savefig("test.png") 

देता है::

enter image description here

संबंधित मुद्दे