2011-10-29 9 views
12

में टेक्स्ट संरेखण मैं matplotlib axes किंवदंती में डिफ़ॉल्ट रूप से प्रविष्टियों को सही-संरेखित करने का प्रयास कर रहा हूं (डिफ़ॉल्ट रूप से वे बाएं-गठबंधन होते हैं), लेकिन ऐसा करने का कोई तरीका नहीं दिख रहा है। सेटअप मैं नीचे है:Matplotlib legend

ax = my_fig.get_axes()[0] 
legend_font = FontProperties(size=10) 
ax.legend(prop=legend_font, num_points=1, markerscale=0.5) 

वहाँ matplotlib Axes के लिए डॉक्स में कथा कीवर्ड तर्कों की सूची है (मैं ax.plot() आदेश का उपयोग कुल्हाड़ियों my_fig करने के लिए डेटा और लेबल जोड़ लिया है) , लेकिन वहाँ किंवदंती प्रविष्टियों के संरेखण को सेट करने के लिए कोई कठोर तरीका प्रतीत नहीं होता है। किसी को यह करने का एक पिछवाड़े तरीका पता है? धन्यवाद।

संपादित करें:

स्पष्ट करने के लिए मैं क्या हासिल करने की कोशिश कर रहा हूँ, अभी मेरी कथा की तरह दिखता है:

Maneuver: 12-OCT-2011 12:00 UTC 

    Bias: 14-OCT-2011 06:00 UTC 
:

Maneuver: 12-OCT-2011 12:00 UTC 

Bias: 14-OCT-2011 06:00 UTC 

मैं इसे की तरह लग रहे करना चाहते हैं

+1

क्या आपके लेबल टेक्स्ट में बहु-रेखाएं शामिल हैं? यदि ऐसा है तो आप label_text.set_multialignment ('right') –

+0

का उपयोग कर सकते हैं सुनिश्चित नहीं है कि मैं समझता हूं कि आपका क्या मतलब है। लेबल के लिए, मेरे पास एक संक्षिप्त विवरण और तारीख है। तो अभी, किंवदंती में बाईं ओर दिए गए विवरण और बाएं गठबंधन विवरण हैं, जो मैं चाहता हूं कि सभी तिथियों को ढेर किया जाए (दाईं ओर गठबंधन किया गया हो)। मैंने एक मुख्य उदाहरण के साथ अपना मुख्य संदेश संपादित किया है। – jeremiahbuddha

+0

एक कामकाज के रूप में, आप उन्हें रिक्त स्थान के साथ पैड कर सकते हैं (बशर्ते आप मोनोस्पेस फ़ॉन्ट का उपयोग कर रहे हों) –

उत्तर

15

जो पिछला आप ढूंढ रहे हैं वह निम्नलिखित है:

# get the width of your widest label, since every label will need 
# to shift by this amount after we align to the right 
shift = max([t.get_window_extent().width for t in legend.get_texts()]) 
for t in legend.get_texts(): 
    t.set_ha('right') # ha is alias for horizontalalignment 
    t.set_position((shift,0)) 
+2

चिल्लाओ! बस एहसास हुआ कि आप इस साल पीकॉन में आईपीथन स्प्रिंट में मिले पॉल हैं। आखिर में मैं इस जवाब को कोड करने के लिए चारों ओर घूम रहा हूं, धन्यवाद! – jeremiahbuddha

8

मैंने उदाहरण का काम प्राप्त करने का प्रयास किया, लेकिन मैं नहीं कर सका।

कम से कम matplotlib संस्करण 1.1.1 (शायद पहले) के बाद से हमें एक समर्पित रेंडरर उदाहरण की आवश्यकता है। अपने बैकएंड का ख्याल रखें जो रेंडरर को परिभाषित करता है। बैकएंड के आधार पर आउटपुट स्क्रीन पर ठीक दिख सकता है लेकिन पीडीएफ के रूप में निराशाजनक हो सकता है।

# get the width of your widest label, since every label will need 
#to shift by this amount after we align to the right 
renderer = figure.canvas.get_renderer() 
shift = max([t.get_window_extent(renderer).width for t in legend.get_texts()]) 
for t in legend.get_texts(): 
    t.set_ha('right') # ha is alias for horizontalalignment 
    t.set_position((shift,0)) 

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

  • कोई संबंधित समस्या नहीं^_^