2014-08-27 5 views
6

में एक्स (समय, संख्या नहीं) आवृत्ति पर टिक आवृत्ति बदलें मेरी python साजिश डेटा केवल एक्स अक्ष पर 2 अंक दिखाता है।matplotlib

मुझे और अधिक होना है, लेकिन यह नहीं पता कि कैसे।

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

plt.plot(x, y) 

एक्स अक्ष केवल अंतराल के 2 बिंदु दिखाता है। मैंने .xticks का उपयोग करने की कोशिश की लेकिन एक्स अक्ष के लिए काम नहीं किया।

TypeError: object of type 'datetime.datetime' has no len() 
+0

आप किस एमपीएल का उपयोग कर रहे हैं? – tacaswell

+0

और मैं वास्तव में आपके प्रश्न को समझ नहीं पा रहा हूं। – tacaswell

+0

क्या आप वाकई केवल 2 अंक दिखाए जा रहे हैं? यह देखने के लिए आप यह कर सकते हैं कि साजिश डेटा के लिए क्या सोचती है: plt.gca()। लाइनें [0] .get_data() क्या यह संभव है कि अंक एक साथ बहुत करीब हैं? – Lukeclh

उत्तर

-1
plt.plot(matplotlib.dates.date2num(x), y) # matplotlib needs float-s, not <datetime.datetime> instances 
+0

एमपीएल 'डेटटाइम' ऑब्जेक्ट्स के खिलाफ बस ठीक होगा। – tacaswell

11

कारण जो भी हो यह आप केवल डिफ़ॉल्ट रूप से 2 टिक हो रही है, आप इसे (इसे अनुकूलित) ठीक कर सकते हैं टिकर लोकेटर बदलते एक तारीख लोकेटर का उपयोग करके: यह नीचे त्रुटि दे दी है।

import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
plt.plot(x, y) 

ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15)) #to get a tick every 15 minutes 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))  #optional formatting 

आप कई लोकेटर (उदाहरण के लिए: DayLocator, WeekdayLocator, MonthLocator, आदि) दस्तावेज में इसके बारे में पढ़ें:

http://matplotlib.org/api/dates_api.html

लेकिन शायद इस उदाहरण अधिक मदद मिलेगी:

http://matplotlib.org/examples/api/date_demo.html