2010-08-15 19 views
16

का उपयोग कर एक्स-अक्ष पर विशिष्ट तिथियों के विरुद्ध डेटा प्लॉट कैसे करें मेरे पास डेट-वैल्यू जोड़े वाले डेटासेट हैं। मैं एक्स-अक्ष में विशिष्ट तिथियों के साथ उन्हें बार ग्राफ़ में प्लॉट करना चाहता हूं।matplotlib

मेरे समस्या यह है कि matplotlib पूरे तिथि सीमा में xticks वितरित करता है; और अंक का उपयोग कर डेटा प्लॉट भी करता है।

दिनांकों सभी datetime वस्तुओं रहे हैं। यहाँ डाटासेट का एक नमूना है:

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123), 
     (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678), 
     (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987), 
     (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)] 

यहाँ एक runnable कोड का उपयोग नमूना है pyplot

import datetime as DT 
from matplotlib import pyplot as plt 

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123), 
     (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678), 
     (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987), 
     (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)] 

x = [date for (date, value) in data] 
y = [value for (date, value) in data] 

fig = plt.figure() 

graph = fig.add_subplot(111) 
graph.plot_date(x,y) 

plt.show() 

प्रश्न सारांश:
मेरे स्थिति और अधिक की तरह मैं एक Axes उदाहरण के लिए तैयार है (द्वारा संदर्भित उपरोक्त कोड में) और मैं निम्नलिखित करना चाहता हूं:

  1. xticks सटीक दिनांक मानों के अनुरूप करें। मैंने matplotlib.dates.DateLocator के बारे में सुना है, लेकिन मुझे नहीं पता कि कैसे एक बनाएं और फिर इसे एक विशिष्ट Axes ऑब्जेक्ट से संबद्ध करें।
  2. इस्तेमाल किया जा रहा (बार, रेखा, अंक, आदि) ग्राफ़ का प्रकार अधिक से अधिक नियंत्रण हासिल
+0

बस एक टिप: के बाद से अपने प्रश्न वास्तव में matplotlib के बारे में विशुद्ध रूप से है और कुछ भी wxWidgets के लिए विशिष्ट नहीं है, यह चीजों को आसान करता है, तो आप को बदल कर सकता था 'matplotlib.pyplot' से फ़ंक्शंस का उपयोग करने के लिए आपका उदाहरण और Wx सामान को इसके बाहर छोड़ दें। –

+0

@ डेविड: फिक्स्ड। धन्यवाद, मुझे एहसास हुआ कि वहां अधिक लोग हो सकते हैं जो 'matplotlib' + 'pyplot' को' matplotlib' +' wx' – Kit

उत्तर

28

क्या आप कर रहे हैं काफी सरल है कि यह सबसे आसान सिर्फ साजिश का उपयोग करने के बजाय, plot_date से है प्राप्त करें। plot_date अधिक जटिल मामलों के लिए बहुत अच्छा है, लेकिन जो भी आपको चाहिए उसे स्थापित करने के बिना आसानी से पूरा किया जा सकता है।

उदाहरण के लिए, ऊपर अपने उदाहरण के आधार पर:

import datetime as DT 
from matplotlib import pyplot as plt 
from matplotlib.dates import date2num 

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123), 
     (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678), 
     (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987), 
     (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)] 

x = [date2num(date) for (date, value) in data] 
y = [value for (date, value) in data] 

fig = plt.figure() 

graph = fig.add_subplot(111) 

# Plot the data as a red line with round markers 
graph.plot(x,y,'r-o') 

# Set the xtick locations to correspond to just the dates you entered. 
graph.set_xticks(x) 

# Set the xtick labels to correspond to just the dates you entered. 
graph.set_xticklabels(
     [date.strftime("%Y-%m-%d") for (date, value) in data] 
     ) 

plt.show() 

आप एक बार साजिश चाहते हैं, तो बस plt.bar() का उपयोग करें। यह समझने के लिए लाइन और मार्कर शैलियों सेट करने का तरीका, देख plt.plot() Plot with date labels at marker locations http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.png

+0

+1 से बेहतर पढ़ सकते हैं यह उत्कृष्ट है। धन्यवाद! – Kit