2011-08-07 17 views
12

मैं, गैर संख्यात्मक डेटा के खिलाफ संख्यात्मक डेटा प्लॉट करना चाहते हैं का कहना है कि कुछ इस तरह:एक्स अक्ष पर गैर संख्यात्मक डेटा के साथ प्लॉट

import matplotlib.pyplot as pl 
x=['a','b','c','d'] 
y=[1,2,3,4] 
pl.plot(x,y) 

हालांकि, matplotlib साजिश संकुल के साथ आपको एक चेतावनी मिलती है कि डेटा फ्लोट नहीं है (ValueError: फ्लोट() के लिए अमान्य शाब्दिक (ए)।

उनके 'How-to' में, वे पहले एक्स अक्ष पर संख्यात्मक डेटा डालने का सुझाव देते हैं और फिर इसे प्रारूपित करते हैं। क्या इसे सीधे करने के लिए कोई तरीका है (ऊपर के रूप में)?

उत्तर

13

xticks फ़ंक्शन का उपयोग करें।

import matplotlib.pyplot as pl 
xticks=['a','b','c','d'] 
x=[1,2,3,4] 
y=[1,2,3,4] 
pl.plot(x,y) 
pl.xticks(x,xticks) 
pl.show() 
+0

यह काम करता है, धन्यवाद! –

12
import matplotlib.pyplot as plt 
x = ['a','b','c','d'] 
y = [1,2,3,4] 
plt.plot(y) 
plt.xticks(range(len(x)), x) 
plt.show() 

enter image description here

एक तरफ ध्यान दें पर, दिनांक इस अर्थ में संख्यात्मक हों (जैसे कि वे कोई स्वाभाविक क्रम और रिक्ति है)।

Matplotlib उपरोक्त उदाहरण की तुलना में अस्थायी डेटा को काफी अच्छी तरह से और बहुत अलग तरीके से साजिश करता है। Matplotlib examples section में an example है, लेकिन यह कई अलग-अलग चीजों को दिखाने पर केंद्रित है। आम तौर पर, आप plot_date का उपयोग करते हैं या बस डेटा प्लॉट करते हैं और विभिन्न दिनांक लोकेटर और टिकर्स का उपयोग करने के लिए matplotlib को बताने के लिए ax.xaxis_date() (या yaxis_date) पर कॉल करें।

+0

यह सिर्फ एक्स अक्ष के तहत लेबल (अपने कोड पर अमल करने की कोशिश) डालता है। मैं एक्स एक्सिस पर 'ए', 'बी', 'सी', 'डी' एक्स एक्स मान –

+0

@ मैक्स ली - मैं सोच नहीं रहा था। मेरा मतलब ऊपर संपादित हिस्सा रखना था। –

+0

अब, यह काम करता है, धन्यवाद! –

0

बार चार्ट इस स्थिति में बेहतर कर रहे हैं:

x = ['a','b','c','d'] 
y = [1,2,3,4] 
plt.bar(x,y) 
संबंधित मुद्दे