/ / एक्सिस सब्प्लॉट, वास्तविक समन्वय में प्रदर्शन समन्वय को परिवर्तित करें - पायथन, पायथन-2.7, matplotlib, साजिश

एक्सिससबप्लॉट, डिस्प्ले समन्वय को वास्तविक समन्वय में परिवर्तित करें - पायथन, पायथन-2.7, मैटलप्लिब, साजिश

मैं एक का उपयोग करने की कोशिश कर रहा हूँ AxisSubplot साजिश पर आकृतियों को चित्रित करने के लिए कुछ निर्देशांक निर्देशांक को वास्तविक निर्देशांक में परिवर्तित करने के लिए ऑब्जेक्ट करें। समस्या यह है कि मैं दस्तावेज नहीं ढूंढ सकता या AxisSubplot कहीं भी , समझा एक्सिस लेकिन यह पता नहीं लगा सकता कि पृथ्वी पर क्या है AxisSubplot वस्तु।

मेरा प्लॉट निर्देशांक टाइम एक्स Altitude द्वारा प्रदर्शित होते हैं, इसलिए प्रदर्शन बुद्धिमान एक सेट हो सकता है

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

मेरे डिस्प्ले फ़ंक्शन में मैं सबप्लॉट की धुरी को इस प्रकार प्रारूपित करता हूं:

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

अब जब मैं उपरोक्त सेट के उदाहरण के लिए बहुभुज प्रदर्शित करना चाहता हूं, तो मैं उस तारीख स्ट्रिंग को कोरिडनेट्स को साजिश में कैसे परिवर्तित कर सकता हूं?

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

और निश्चित रूप से यह मुझे त्रुटि देता है ValueError: invalid literal for float(): 03:42:01। क्या किसी को यह पता चलेगा कि यह कैसे करें? यहां प्लॉट अक्ष की तरह दिखने का एक उदाहरण है:

यहां छवि विवरण दर्ज करें

उत्तर:

जवाब के लिए 3 № 1

आपको दो समस्याएं प्रतीत होती हैं:

  1. आप के दस्तावेज नहीं मिल सकते हैं AxesSubplot वस्तु।

    ऐसा इसलिए है क्योंकि यह केवल रनटाइम पर बनाया गया है। यह से विरासत में आता है SubplotBase। आपको "अधिक जानकारी मिल जाएगी यह उत्तर (एक ही प्रश्न के लिए).

  2. आप x बहु निर्देशांक के रूप में दिनांक / समय के साथ बहुभुज प्लॉट करना चाहते हैं:

    उस matplotlib के लिए यह जानने की जरूरत है कि आपके निर्देशांक दिनांक / समय का प्रतिनिधित्व करते हैं। कुछ साजिश कार्य हैं जो डेटाटाइम ऑब्जेक्ट्स को संभाल सकते हैं (उदा। plot_date), लेकिन सामान्य रूप से आपको इसका ख्याल रखना होगा।

    Matplotlib तारीखों (दिनों की फ्लोटिंग संख्या) के अपने आंतरिक प्रतिनिधित्व का उपयोग करता है, लेकिन इसमें आवश्यक रूपांतरण कार्यों को प्रदान करता है matplotlib.dates मॉड्यूल। आपके मामले में आप इसे निम्नानुसार उपयोग कर सकते हैं:

    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()
    

    परिणाम:

    यहां छवि विवरण दर्ज करें