2014-06-19 5 views
6

Ich möchte mit Matplotlib/pylab plotten und Datum und Uhrzeit auf der x-axis zeigen. Dazu verwende ich das Datetime-Modul.Warum bekomme ich einen AttributeError, wenn ich scatter() verwende, aber nicht wenn ich plot() verwende

hier ein Arbeitscode ist, der genau das tut, was

import datetime 
from pylab import * 

figure() 
t2=[] 
t2.append(datetime.datetime(1970,1,1)) 
t2.append(datetime.datetime(2000,1,1)) 
xend= datetime.datetime.now() 
yy=['0', '1'] 
plot(t2, yy) 
print "lim is", xend 
xlim(datetime.datetime(1980,1,1), xend) 

jedoch erforderlich-ist, wenn ich den scatter(t2,yy) Befehl statt plot (t2,yy) verwenden, gibt es eine Fehlermeldung:

AttributeError: 'numpy.string_' object has no attribute 'toordinal'

Warum ist das passiert und wie kann ich eine Streuung zusammen mit Handlung zeigen?

Eine ähnliche Frage wurde zuvor as- AttributeError: 'time.struct_time' object has no attribute 'toordinal' gestellt, aber die Lösungen helfen nicht.

+0

Was möchten Sie mit 'scatter' erreichen, das' plot' nicht verarbeiten kann? Ich frage b/c konzeptionell, ich denke nicht, dass Streuung für eine Zeitreihe angemessen ist - aber das ist eine ziemlich willkürliche Unterscheidung sogar in meinem eigenen Kopf. –

+0

'plot' zeigt mir eine Linie, die alle Datenpunkte miteinander verbindet, aber nicht die Datenpunkte selbst (es sei denn, es gibt einen Weg, den ich nicht kenne). Aber ich möchte auch die Datenpunkte anzeigen, so dass der Betrachter weiß, zu welchen Zeitpunkten die Daten gesammelt wurden. – sbhatla

+0

Zu einem nicht verwandten Hinweis, wie zeigen Sie Code inline in Stack-Überlauf? Wie das, was Sie oben mit den Wörtern streuen und plotten getan haben. – sbhatla

Antwort

0

Wenn Sie einen int oder float Typ für yy verwenden Sie nicht bekommen, um diesen Fehler mit scatter():

yy = [0, 1] 
2

Hier ist ein erweitertes Beispiel dafür, wie ich dies tun würde:

import datetime 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
t2=[ 
    datetime.datetime(1970,1,1), 
    datetime.datetime(2000,1,1) 
] 
xend = datetime.datetime.now() 
yy= [0, 1] 
ax.plot(t2, yy, linestyle='none', marker='s', 
     markerfacecolor='cornflowerblue', 
     markeredgecolor='black', 
     markersize=7, 
     label='my scatter plot') 

print("lim is {0}".format(xend)) 
ax.set_xlim(left=datetime.datetime(1960,1,1), right=xend) 
ax.set_ylim(bottom=-1, top=2) 
ax.set_xlabel('Date') 
ax.set_ylabel('Value') 
ax.legend(loc='upper left') 

enter image description here