2010-04-17 10 views
39

मैं matplotlib में एक साजिश के लेबल (उदा। Xlabel या ylabel) में एक नई लाइन कैसे जोड़ सकता हूं? उदाहरण के लिए,पायथन में टीएक्स के साथ matplotlib लेबल में newline डाल?

plt.bar([1, 2], [4, 5]) 
plt.xlabel("My x label") 
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 

आदर्श रूप से मैं वाई-लेबल भी केंद्रित होना चाहता हूं। क्या इसे करने का कोई तरीका है? यह महत्वपूर्ण है कि लेबल में टीएक्स ('$' में संलग्न) और नई लाइन दोनों हों।

उत्तर

21

आपका उदाहरण ठीक है कि यह कैसे किया जाता है, आप \n का उपयोग करते हैं। आप आर उपसर्ग दूर ले जाने हालांकि बहुत अजगर एक कच्चे स्ट्रिंग

+6

आप यह सुनिश्चित करने के लिए LaTeX कमांड को सक्रिय रूप से डबल-सेव करना चाहते हैं कि वे पाइथन द्वारा व्याख्या नहीं किए गए हैं: 'xlabel ('$ \\ सिग्मा $')' –

+4

यह उत्तर सही नहीं है। आप * या तो * सामान्य स्ट्रिंग (कोई आर) * में * लेटेक्स '\' से बचें * या * आप @EOLs [answer] का पालन करें (http://stackoverflow.com/a/2666270/1157089) – aaren

+1

केंद्र के संबंध में: 'ylabel ('यह ऊर्ध्वाधर \ ntest' है, multialignment = 'center') http://matplotlib.org/examples/pylab_examples/multiline.html – Faber

58

आप दोनों दुनिया का सबसे अच्छा हो सकता है के रूप में यह इलाज नहीं है की जरूरत है: स्वत: "से बचने" LaTeX आदेश और नई-पंक्तियों की:

plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math" 
      "\n" # Newline: the backslash is interpreted as usual 
      r"continues here with $\pi$") 

(तीन पंक्तियों का उपयोग करने के बजाय, सिंगल रिक्त स्थान से स्ट्रिंग को अलग करना एक और विकल्प है)।

वास्तव में, पायथन स्वचालित रूप से स्ट्रिंग अक्षर को एक दूसरे का पालन करता है, और आप कच्चे तार (r"…") और चरित्र इंटरपोलेशन ("\n") के साथ स्ट्रिंग मिश्रण कर सकते हैं।

+0

से बस एक त्वरित टिप्पणी - यह लेबल करने का एक आसान तरीका है एक (ए), (बी), आदि के साथ सबप्लॉट्स जब वह लेबल साजिश के नीचे होना चाहिए और xlabel के साथ केंद्रित होना चाहिए। इस तरह plt.tight_layout() पूरे लेबल को भी देखता है और तदनुसार समायोजित करता है। – SeanM

2

निम्नलिखित matplotlib अजगर स्क्रिप्ट नई लाइन

ax.text(10, 70, 'shock size \n $n-n_{fd}$') 

निम्नलिखित नई लाइन नहीं है के साथ पाठ पैदा करता है। सूचना पाठ

ax.text(10, 70, r'shock size \n $n-n_{fd}$') 
7
plt.bar([1, 2], [4, 5]) 
plt.xlabel("My x label") 
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here") 

से पहले आर बस एक नई पंक्ति कि कच्चे स्ट्रिंग रूप में नहीं है के साथ तार जोड़।

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