2013-07-17 9 views
6

Chcę wykreślić kilka znaczników czasu (format Godzina-Minuta-Dru-rok-miesiąc-dzień). Używam następującego kodu, jednak nie pokazuje on żadnej godziny, minuty i sekundy informacji, pokazuje je jako 00-00-00. Sprawdziłem dwukrotnie tablicę dat, a jak widać z poniższego opisu, nie są one zerowe.Wykreślanie znaczników czasu (godzina/minuta/sekunda) z Matplotlibem

Czy masz pojęcie o tym, dlaczego dostaję 00-00-00? enter image description here

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import dateutil 

dates = [dateutil.parser.parse(s) for s in datestrings] 
# datestrings = ['2012-02-21 11:28:17.980000', '2012-02-21 12:15:32.453000', '2012-02-21 23:26:23.734000', '2012-02-26 17:42:15.804000'] 
plt.subplots_adjust(bottom=0.2) 
plt.xticks(rotation= 80) 
ax=plt.gca() 
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S') 
ax.xaxis.set_major_formatter(xfmt) 
plt.plot(dates[0:10],plt_data[0:10], "o-") 
plt.show() 

Odpowiedz

7

Spróbuj powiększania wykresu, można zobaczyć datetimes rozwinąć jako swoimi x zmian skalę osi.

plotting unix timestamps in matplotlib

miałem podobnie przykry problem, gdy próbuje się wykreślić Strefy pozytywnej selekcji na chromosomach. Jeśli pomniejszony zbyt daleko, rzeczy znikną całkowicie!

edytuj: Ten kod kreśli daty dokładnie tak, jak je podajesz, ale nie dodaje tyknięć pomiędzy nimi.

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import dateutil 

datestrings = ['2012-02-21 11:28:17.980000', '2012-02-21 12:15:32.453000', '2012-02-21 23:26:23.734000', '2012-02-26 17:42:15.804000'] 
dates = [dateutil.parser.parse(s) for s in datestrings] 

plt_data = range(5,9) 
plt.subplots_adjust(bottom=0.2) 
plt.xticks(rotation=25) 

ax=plt.gca() 
ax.set_xticks(dates) 

xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S') 
ax.xaxis.set_major_formatter(xfmt) 
plt.plot(dates,plt_data, "o-") 
plt.show() 
+0

Dzięki za odpowiedź. Już patrzyłem na pytanie "Wyznaczanie unixowych znaczników czasowych w matplotlib". Jednak moim problemem jest to, że Matplotlib nie pokazuje godziny-minuty-sekundy, jak to pokazuje na "wykreślaniu jednostkowych znaczników czasowych w matplotlib". W moim przypadku po prostu pokazuje je jako 00-00-00 i nie mogę zrozumieć dlaczego (ponieważ wygląda na to, że moje sygnatury czasowe są poprawne) .. – user1048858

+0

Masz rację, ponieważ próbujesz wypełnić oś X kleszczami , zobacz moją zredagowaną odpowiedź. – seth

0

Mogę powiedzieć, dlaczego pokazuje 00:00:00. To dlatego, że jest to czas rozpoczęcia tego konkretnego dnia. Na przykład jeden znak jest w dniu 2012-02-22 00:00:00 (12 północy 2012-02-22), a drugi jest na 2012-02-23 00:00:00 (12 północy 2012-02-23).

Kleszcze dla znaczników czasu pomiędzy tymi dwoma czasami nie są wyświetlane.

Sam staram się wymyślić, jak pokazać kleszcze pomiędzy tymi czasami.

Powiązane problemy