2013-06-18 10 views
10

क्या ध्रुवीय साजिश टिक लेबल (थेटा) के पैडिंग/ऑफ़सेट को बढ़ाने का कोई तरीका है?matplotlib: ध्रुवीय भूखंडों को पैडिंग/ऑफसेट जोड़ने के लिए लेबल

import matplotlib 
import numpy as np 
from matplotlib.pyplot import figure, show, grid 

# make a square figure 
fig = figure(figsize=(2, 2)) 
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c') 
ax.set_yticklabels([]) 

r = np.arange(0, 3.0, 0.01) 
theta = 2*np.pi*r 
ax.plot(theta, r, color='#ee8d18', lw=3) 
ax.set_rmax(2.0) 
show() 

मैं थाटा टिकल को ध्रुवीय साजिश से दूर ले जाना चाहता हूं ताकि वे ओवरलैप न हों।

enter image description here

उत्तर

11

सबसे पहले; यह देखते हुए कि आपने figsize को (2,2) के रूप में निर्दिष्ट किया है और ax चौड़ाई और ऊंचाई दोनों का 80% पर कब्जा कर लिया है, तो आपके पास बहुत कम स्पेस को टिकलबेल पैड करने के लिए छोड़ दिया गया है। यह आंकड़े के उदाहरणों पर टिकलबेल को "काट" सकता है। यह आसानी से "निर्धारित" किया जा सकता है या तो

  • निर्दिष्ट करना बड़ा figsize
  • ax (2,2) पर कम जगह आकार आंकड़ा पर कब्जा बनाने से
  • ticklabels के लिए
  • उपयोग छोटे fontsize

या इनमें से कोई भी संयोजन। एक और, मेरी राय में बेहतर, इस "समस्या" का समाधान Axes की सीमाओं को निर्दिष्ट करने के बजाय एक सबप्लॉट का उपयोग करना है;

ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c') 

इस रूप में यह विधि tight_layout() जो स्वचालित रूप से आंकड़ा लेआउट अच्छी तरह से सभी तत्वों को शामिल करने के लिए कॉन्फ़िगर करता है उपयोग करने के लिए संभव बनाता है।

फिर असली समस्या पर हाथ से; पैडिंग PolarAxes पर आप अन्य चीजों के साथ, थेटा-टिक के रेडियल प्लेसमेंट को सेट कर सकते हैं। यह ध्रुवीय अक्ष त्रिज्या के अंश को निर्दिष्ट करके किया जाता है जहां आप PolarAxes की set_thetagrids() विधि के frac पैरामीटर के तर्क के रूप में टिकलबल्स को एक तर्क के रूप में रखना चाहते हैं। तर्क धुरी के त्रिज्या का एक अंश होना चाहिए जहां आप टिकलबेल रखना चाहते हैं। अर्थात। frac < 1 के लिए टिकलबेल अक्ष के अंदर रखा जाएगा, जबकि frac> 1 के लिए उन्हें अक्ष के बाहर रखा जाएगा।

import numpy as np 
from matplotlib.pyplot import figure, show, grid, tight_layout 
# make a square figure 
fig = figure(figsize=(2, 2)) 
ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c') 
ax.set_yticklabels([]) 

r = np.arange(0, 3.0, 0.01) 
theta = 2*np.pi*r 
ax.plot(theta, r, color='#ee8d18', lw=3) 
ax.set_rmax(2.0) 

# tick locations 
thetaticks = np.arange(0,360,45) 

# set ticklabels location at 1.3 times the axes' radius 
ax.set_thetagrids(thetaticks, frac=1.3) 

tight_layout() 

show() 

PolarAxes with frac=1.3

आपको लगता है कि सबसे अच्छा अपनी आवश्यकताओं के लिए अनुकूल है एक मूल्य को खोजने के लिए frac के लिए अलग मान प्रयास करना चाहिए:

आपका कोड तो कुछ इस तरह हो सकता है।

यदि आप उपरोक्त पैरामीटर frac पर कोई मान निर्दिष्ट नहीं करते हैं, यानी frac में डिफ़ॉल्ट मान None है, तो कोड नीचे एक प्लॉट आउटपुट करता है। ध्यान दें कि साजिश का त्रिज्या बड़ा है, क्योंकि उपरोक्त उदाहरण में टिकलबेल "उतनी जगह पर कब्जा नहीं करते हैं"।

PolarAxes with frac=None

+0

वाह, एक अद्भुत स्पष्टीकरण! आपका बहुत बहुत धन्यवाद! – dimka

+0

क्या आप जानते हैं कि डिफ़ॉल्ट 'frac' क्या है? – Annan

+0

@ अन्नन [इस] से [https://github.com/matplotlib/matplotlib/blob/ff31d67a8103620221a3eeadeb985e8268a7d934/doc/users/whats_new.rst#enhancements-to-polar-plot) ऐसा लगता है कि 'frac' बहिष्कृत है। "[...] नतीजतन, 'frac' तर्क .olarAxes।set_thetagrids अब लागू नहीं है। टिक पैडिंग को 'पैड' तर्क के साथ संशोधित किया जा सकता है .एक्सिस.tick_params या .Axis.set_tick_params। " – hooy

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