माटप्लोटलिब प्लॉट के ऊपरी बाएँ कोने में पाठ डालना


112

मैं मैटलपोटलिब फिगर के शीर्ष बाएं (या शीर्ष दाएं) कोने में पाठ कैसे डाल सकता हूं, उदाहरण के लिए जहां एक शीर्ष बाएं किंवदंती होगी, या साजिश के शीर्ष पर लेकिन शीर्ष बाएं कोने में? जैसे अगर यह एक pl.scatter () है, तो कुछ ऐसा जो स्कैटर के वर्ग के भीतर होगा, सबसे ऊपरी कोने में छोड़ दिया गया है।

मैं आदर्श रूप से प्लॉटप्लॉट के पैमाने को जाने बिना आदर्श रूप से ऐसा करना चाहूंगा, क्योंकि यह डेटासेट से डेटा सेट में बदल जाएगा। मैं बस यह चाहता हूं कि यह पाठ ऊपरी बाएँ में, या मोटे तौर पर ऊपरी दाएँ में हो। लीजेंड टाइप पोजिशनिंग के साथ इसे किसी भी स्कैटर प्लॉट पॉइंट के साथ ओवरलैप नहीं करना चाहिए।

धन्यवाद!


यदि आप अपना पाठ एक बॉक्स में रखना चाहते हैं stackoverflow.com/questions/20842613/…
राफेल

1
मुझे लगता है कि यह इस प्रश्न का एक डुप्लिकेट है । डुप्लिकेट प्रश्न के और भी बेहतर उत्तर हैं, हालाँकि यहाँ दिए गए उत्तर का उपयोग (उपयोग textऔर ax.transAxes) उनमें से नहीं है।
इम्पोर्टेंसऑफबिंगएर्नेस्ट

जवाबों:


162

आप उपयोग कर सकते हैं text

text(x, y, s, fontsize=12)

text निर्देशांक धुरी के सापेक्ष दिए जा सकते हैं, इसलिए आपके पाठ की स्थिति भूखंड के आकार से स्वतंत्र होगी:

डिफ़ॉल्ट रूपांतर निर्दिष्ट करता है कि पाठ डेटा कॉर्ड्स में है, वैकल्पिक रूप से, आप अक्ष कोर्ड्स में पाठ निर्दिष्ट कर सकते हैं (0,0 निचला-बाएँ है और 1,1 ऊपरी-दाएँ है)। कुल्हाड़ियों के केंद्र में पाठ के नीचे का उदाहरण ::

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

पाठ को रोकने के लिए अपने बिखराव के किसी भी बिंदु पर हस्तक्षेप करना अधिक कठिन है। आसान तरीका यह है कि y_axis (ymax ylim((ymin,ymax))) को अपने बिंदुओं के अधिकतम y- समन्वय से थोड़ा अधिक मूल्य पर सेट करें। इस तरह आपके पास पाठ के लिए हमेशा यह खाली जगह होगी।

संपादित करें: यहाँ आपके पास एक उदाहरण है:

In [17]: from pylab import figure, text, scatter, show
In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

यहां छवि विवरण दर्ज करें

हा और va पैरामीटर सम्मिलन बिंदु के सापेक्ष आपके पाठ के संरेखण को निर्धारित करते हैं। अर्थात। हा = 'लेफ्ट' फ्रेम को कम करने (बाएं संकरा) मैन्युअल रूप से करने पर एक लंबे टेक्स्ट को लेफ्ट एक्सिस से बाहर जाने से रोकने के लिए एक अच्छा सेट है।


मुझे सेंटिंग मिलती है लेकिन मैं इसे कैसे बना सकता हूं? मैंने "क्षैतिज" सेट करने के लिए 'लेफ्ट' सेट किया और

1
संकेत के रूप में आपको x, y मानों के साथ खेलना चाहिए ( 0,0 कम-बाएँ है और 1,1 ऊपरी-दाएँ है )। संपादित देखें
joaquin

2
@ user3645626 आयात कर रहे हैं: from pylab import figure, text, scatter, show उत्तर में कोड पाइलैब मोड में एक ipython कंसोल में निष्पादित किया गया था जहां स्पष्ट आयात neccesary नहीं थे। एक स्वच्छ वातावरण पर आपको उपरोक्त आयात करने की आवश्यकता है और show()भूखंड को देखने के लिए
joaquin

5

एक समाधान plt.legendफ़ंक्शन का उपयोग करना होगा , भले ही आप एक वास्तविक किंवदंती न चाहें। आप lockeyterm का उपयोग करके किंवदंती बॉक्स के स्थान को निर्दिष्ट कर सकते हैं । इस वेबसाइट पर और अधिक जानकारी प्राप्त की जा सकती है , लेकिन मैंने एक उदाहरण भी शामिल किया है जिसमें दिखाया गया है कि एक किंवदंती को कैसे रखा जाए:

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

ध्यान दें कि loc=2, किंवदंती भूखंड के ऊपरी-बाएँ कोने में है। और यदि पाठ भूखंड के साथ ओवरलैप होता है, तो आप इसे उपयोग करके छोटा कर सकते हैं legend.fontsize, जो बाद में किंवदंती को छोटा कर देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.