dates
plt.plot(dates,values)
ile datetime.datetime
nesnelerinin bulunduğu bir listeyi aramak mümkündür. Arsa, xtick'leri '%Y-%m-%d'
gibi bir biçimde içerecek ve siz yakınlaştırdıkça, otomatik olarak saat, dakika, saniye gösteren birime dönüşecektir. Bununla birlikte, bundan daha fazla kontrol sahibi olmak istediğiniz gibi geliyor. Belki de istediğiniz skalada saat, dakika, saniye gösterilmez. Eğer plt.plot
için datetime.datetime
nesneleri geçerse
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
yazık ki, otomatik matplotlib tarafından seçilen xticks daima sıfıra eşit saniye var gibi görünüyor:
Bu durumda, kendi tarih biçimlendirici ayarlayabilirsiniz. Örneğin,
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()
o zaman güzel biçimlendirilmiş olsun tarihleri çalıştırmak, ancak tüm XTick saniye sıfır olursa.
Peki, çözüm nedir?
Zaman damgalarınızı -> datetime.datetime nesneleri -> matplotlib verilerinizi dönüştürürseniz ve verileri plt.plot
olarak geçirirseniz, saniye korunur.
PS. "Matplotlib datenum" ile, matplotlib.dates.date2num
tarafından döndürülen numara türünü kastediyorum. tarihsaat çizdirirken
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 kesinlikle yaptığınızı tam olarak ne ... zaman bilgilerini kaldırmak _doesn't_? Eksenin etiketini değiştirmek mi istiyorsun? Çizilen veri noktası başına sadece bir onay/etiket mi istiyorsunuz? –