2017-12-24 11 views
0

ich folgende xlim auf meine x-Achse gesetzt haben:Holen Position Datum auf der x-Achse

axA.set_xlim(datetime.date(2016, 12, 1), datetime.date(2018, 1, 30)) 

und jetzt würde Ich mag die Position des 12. Oktober bekommen (2017.10.12) auf meiner X-Achse, damit ich dort eine Anmerkung einfügen kann.

Ich habe versucht, das, dass aus mit date2num und datestr2num auf Figur:

release_date = datetime.datetime(2017, 10, 12) 

print(mdates.date2num(release_date)) 
print(mdates.datestr2num('2017-10-12')) 

print(axA.get_xlim()) 

Der obige Code-Ausgang:

-736614.0 
736614.0 

(17136.0, 17561.0) 

Zunächst scheint es, wie date2num und datestr2num nicht geben ein identisches Ergebnis, aber problematischer liegen diese Ergebnisse nicht im Bereich von xlim.

Wie kann ich die X-Position eines Datums finden (um eine Annotation zu platzieren), vorausgesetzt, dass xlim ich oben eingestellt habe?

Code, um das Problem zu reproduzieren:

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
from datetime import datetime 


def get_dataframe(): 
    values = [12, 16, 20] 
    dates = [ 
     datetime(2017, 12, 24), 
     datetime(2017, 12, 23), 
     datetime(2017, 12, 22) 
    ] 

    df = pd.DataFrame(data={'date': dates, 'value': values}) 
    df = df.set_index(['date']).sort_index() 

    return df 


def plot(dataA): 
    fig, axA = plt.subplots() 
    dataA.plot(ax=axA) 

    axA.set_xlim(datetime(2016, 12, 1), datetime(2018, 1, 30)) 

    release = datetime(2017, 10, 12) 
    print(mdates.date2num(release)) 
    print(mdates.datestr2num('2017-10-12')) 
    print(axA.get_xlim()) 


df = get_dataframe() 
plot(df) 
plt.show() 
+0

den Code Lauf gibt's 736.614,0 736.614,0 (736.299,0, 736.724,0) ' für mich. Welche matplotlib Version verwendest du? Auch hier würde ein [mcve] viel helfen, das Problem zu finden. – ImportanceOfBeingErnest

Antwort

1

Sie können direkt ein Datum-Objekt verwenden, wenn Sie ein Datum xaxis haben:

ax.annotate('hello', xy=(datetime.datetime(2017, 10, 12), 1), 
      xytext=(datetime.datetime(2017, 10, 12), 5), 
      arrowprops={'facecolor': 'r'}) 
+1

Nicht sicher, ob dies das Problem jedoch löst. Wenn die Achsenlimits wie in der Frage gezeigt deaktiviert sind, wird die Annotation wahrscheinlich auch nicht korrekt angezeigt. – ImportanceOfBeingErnest

Verwandte Themen