/ / AxisSublplot, konvertieren Display Koordianten in echte Koordianten - Python, Python-2.7, Matplotlib, Plot

AxisSublplot, konvertieren Display Koordianten in echte Koordinaten - Python, Python-2.7, Matplotlib, Plot

Ich versuche einen zu benutzen AxisSubplot Objekt zum Konvertieren einiger Anzeigekoordinaten in reale Koordinaten zum Zeichnen von Formen auf die Zeichnung. Das Problem ist, ich kann keine Dokumentation finden oder AxisSubplot irgendwo , Aha Achse aber kann nicht herausfinden, was auf der Erde in einem enthalten ist AxisSubplot Objekt.

Meine Diagrammkoordinaten werden nach Zeit x Höhe angezeigt Anzeige weise kann ein Satz sein

[ ["03:42:01", 2.3] , ["03:42:06", 3.4] , ...]

In meiner Anzeigefunktion formatiere ich die Achse des Teilplots wie folgt:

    fig.get_xaxis().set_major_locator(mpl.dates.AutoDateLocator())
fig.get_xaxis().set_major_formatter(mpl.dates.DateFormatter("%H:%M:%S"))

Wenn ich nun ein Polygon mit der obigen Einstellung anzeigen möchte, wie kann ich diese Datumszeichenfolge in cooridnates umwandeln?

    points = [["03:42:01", 1], ["03:43:01", 2.1], ["03:21:01", 1]]
polygon = plt.Polygon(points)
fig.add_patch(polygon)

Und das gibt mir natürlich den Fehler ValueError: invalid literal for float(): 03:42:01. Würde jemand wissen, wie man das macht? Hier ist ein Beispiel, wie die Diagrammachse aussieht:

Bildbeschreibung hier eingeben

Antworten:

3 für die Antwort № 1

Sie scheinen zwei Probleme zu haben:

  1. Sie können die Dokumentation des. Nicht finden AxesSubplot Objekt.

    Dies liegt daran, dass es nur zur Laufzeit erstellt wird. Es erbt von SubplotBase. Sie finden mehr Details in diese Antwort (auf die gleiche Frage).

  2. Sie möchten ein Polygon mit Daten als x-Koordinaten plotten:

    Dafür muss Matplotlib wissen, dass Ihre Koordinaten Daten darstellen. Es gibt einige Zeichenfunktionen, die Datetime-Objekte (z.B. plot_date), aber im Allgemeinen müssen Sie sich darum kümmern.

    Matplotlib verwendet eine eigene interne Darstellung von Daten (floating Anzahl von Tagen), stellt aber die notwendigen Konvertierungsfunktionen in der matplotlib.dates Modul. In Ihrem Fall könnten Sie es wie folgt verwenden:

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.dates as mdates
    from datetime import datetime
    
    # your original data
    p = [["03:42:01", 1], ["03:43:01", 2.1], ["03:21:01", 1]]
    
    # convert the points
    p_converted = np.array([[mdates.date2num(datetime.strptime(x, "%H:%M:%S")), y]
    for x,y in p])
    
    # create a figure and an axis
    fig, ax = plt.subplots(1)
    
    # build the polygon and add it
    polygon = plt.Polygon(p_converted)
    ax.add_patch(polygon)
    
    # set proper axis limits (with 5 minutes margins in x, 0.5 in y)
    x_mrgn = 5/60./24.
    y_mrgn = 0.5
    ax.set_xlim(p_converted[:,0].min() - x_mrgn, p_converted[:,0].max() + x_mrgn)
    ax.set_ylim(p_converted[:,1].min() - y_mrgn, p_converted[:,1].max() + y_mrgn)
    
    # assign date locators and formatters
    ax.xaxis.set_major_locator(mdates.AutoDateLocator())
    ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M:%S"))
    
    # show the figure
    plt.show()
    

    Ergebnis:

    Bildbeschreibung hier eingeben