2013-04-17 22 views
6

के लिए टिक लेबल स्थितियों को मैं 3 डी matplotlib साजिश के लिए टिक लेबल की स्थिति को सेट/सही करने के लिए कैसे काम करने की कोशिश कर रहा हूं। टिक लेबल टिकों के साथ संरेखित नहीं करते हैं। यह मुद्दा विशेष रूप से प्रमुख प्रतीत होता है जब कई टिक लेबल की आवश्यकता होती है।matplotlib 3 डी प्लॉट

मैंने अपने प्रश्न को स्पष्ट करने के लिए matplotlib दस्तावेज़ से एक उदाहरण (http://matplotlib.org/examples/mplot3d/polys3d_demo.html) संशोधित किया है।

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.collections import PolyCollection 
from matplotlib.colors import colorConverter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(10,10)) 
ax = fig.gca(projection='3d') 

cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6) 

xs = np.arange(0, 10, 0.4) 
verts = [] 
zs = np.arange(50) 
for z in zs: 
    ys = np.ones(len(xs))*z 
    ys[0], ys[-1] = 0, 0 
    verts.append(list(zip(xs, ys))) 

poly = PolyCollection(verts,facecolor='c') 
poly.set_alpha(0.7) 
ax.add_collection3d(poly, zs=zs, zdir='y') 

ax.set_xlabel('X') 
ax.set_xlim3d(0, 10) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-1, len(zs)) 
ax.set_yticks(np.arange(len(zs))) 
labels = {} 
for l_c in zs: 
    labels[l_c] = 'This Looks Bad' 
ax.set_yticklabels(labels,rotation=-15) 
ax.set_zlabel('Z') 
ax.set_zlim3d(0, ys.max()) 

plt.show() 

enter image description here

तो सवाल यह है: मैं कैसे टिक लेबल टिक पदों के साथ संरेखित करने के लिए मिल सकता है?

उत्तर

5

वे संरेखित करते हैं, लेकिन टिक पर केंद्रित क्षैतिज स्थिति के साथ। 3 डी व्यू के कारण यह उन्हें नीचे दिखाता है जहां आप उन्हें उम्मीद करेंगे। प्रभाव टिकों की मात्रा से संबंधित नहीं है बल्कि चौड़ाई तक है।

विशिष्ट रूप से संरेखण सेट करने में मदद मिलेगी। जोड़ने का प्रयास करें: जो आप पसंद करते हैं को देखने के लिए अलग संरेखण के साथ एक सा चारों ओर

ax.set_yticklabels(labels,rotation=-15, va='center', ha='left') 

प्ले, मुझे लगता है के बाद हा = 'छोड़' आप कर रहे हैं।

पैडिंग को कम करने, टिक से दूरी, भी मदद कर सकता है।

enter image description here

+1

ओपी को एक नोट के रूप में: 'va' मेरे उदाहरण में 'लंबवत संरेखण' के साथ समरूप है। वही है 'हे' और 'क्षैतिज संरेखण 'के लिए। – Hooked

+0

हां, यह स्पष्ट करने के लिए धन्यवाद कि संक्षेप में उन्हें बहुत टाइप करते समय आनंद मिलता है। :) –

+0

धन्यवाद @ रटर। मुझे लगता है कि यह सबसे अच्छा है कि किया जा सकता है। मैं पहले से ही इन (हा, वीए) के साथ खेला था और लगभग मुझे जो चाहिए वह मिल गया। यह वास्तविक समस्या की तुलना में इस खिलौना उदाहरण पर बेहतर काम करता है जिसे मैं हल करने की कोशिश कर रहा हूं। क्या आप पैडिंग को कम करने का उदाहरण दे सकते हैं? शायद आपके मौजूदा उत्तर में जोड़ें। –

10

इन संरेखण का उपयोग करके, मैं काफी बेहतर प्लेसमेंट मिल:

enter image description here

:

ax.set_yticklabels(labels,rotation=-15, 
        verticalalignment='baseline', 
        horizontalalignment='left') 

मैं कम टिक मार्कर के साथ उदाहरण संशोधित कर लिया है तो आप प्लेसमेंट देख सकते हैं

+0

धन्यवाद @ हुक किया गया। समस्या यह है कि मुझे वहां सभी टिक लेबल होने चाहिए (कम से कम 50 हैं), इसलिए कम टिक मार्करों का उपयोग करना एक विकल्प नहीं है। गलत लेबल अधिक लेबल के साथ काफी प्रमुख है। यहां तक ​​कि आपके समाधान (और @Rutgers के) के रूपों का उपयोग करके, लेबल गठबंधन नहीं दिखते हैं। –

+0

@ random.me आप हमेशा लेबल के फ़ॉन्ट आकार को कम कर सकते हैं, लेकिन आपके पास अभी भी दो बहुत अधिक टेक्स्ट और बहुत कम जगह की मौलिक समस्या है! – Hooked

+0

@ random.me क्या आपको _ticks_ या _text_ की आवश्यकता है? – tacaswell

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