यह dates
datetime.datetime
वस्तुओं की एक सूची होने के साथ plt.plot(dates,values)
कॉल करने के लिए संभव है। साजिश में '%Y-%m-%d'
जैसे प्रारूप में xticks शामिल होंगे और जैसे ही आप ज़ूम इन करेंगे, स्वचालित रूप से उसमें बदल जाएंगे जो घंटे, मिनट, सेकंड दिखाता है।
हालांकि, ऐसा लगता है कि आप इससे अधिक नियंत्रण चाहते हैं। शायद यह आपके इच्छित पैमाने पर घंटे, मिनट, सेकंड नहीं दिखा रहा है।
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
दुर्भाग्यवश, अगर आप plt.plot
को datetime.datetime
वस्तुओं गुजरती हैं, xticks स्वचालित रूप से matplotlib द्वारा चुना हमेशा शून्य के बराबर सेकंड लगता है:
उस मामले में, आप अपनी स्वयं की तिथि फ़ॉर्मेटर सेट कर सकते हैं। उदाहरण के लिए, आप
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,values)
plt.show()
तो आप ठीक से स्वरूपित हो दिनांकों चलाने के लिए, लेकिन सभी xtick सेकंड शून्य हैं।
तो समाधान क्या है?
यदि आप अपने टाइमस्टैम्प -> datetime.datetime ऑब्जेक्ट्स -> matplotlib datenums स्वयं को परिवर्तित करते हैं, और डेटनम को plt.plot
पर पास करते हैं, तो सेकंड संरक्षित होते हैं।
पीएस। "Matplotlib datenum" से मेरा मतलब है कि matplotlib.dates.date2num
द्वारा लौटाया गया नंबर।
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
datenums=md.date2num(dates)
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(datenums,values)
plt.show()
matplotlib निश्चित रूप से समय की जानकारी को दूर _doesn't_ जब datetimes की साजिश रचने ... कि वास्तव में आप क्या कर रहे हो? क्या आप सिर्फ धुरी के लेबलिंग को बदलना चाहते हैं? क्या आप प्रति प्लॉट डेटा पॉइंट पर सिर्फ एक टिक/लेबल चाहते हैं? –