2013-10-16 6 views
8

में x-axis DateFormat को समायोजित करने में असमर्थ मैं matplotlib के साथ एक पांडा समय-श्रृंखला ऑब्जेक्ट data प्लॉट करना चाहता हूं। एक साधारण लाइन चार्ट data.plot() के लिए, मैं ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S')) के साथ एक्स-अक्ष दिनांक प्रारूप को सफलतापूर्वक बदलने में सक्षम था।पांडा बार चार्ट

हालांकि, मैं बार चार्ट data.plot(kind='bar') के लिए ऐसा करने में सक्षम नहीं हूं। और चार्ट दिखाई नहीं देगा। क्या पांडा बार चार्ट के लिए डेटा प्रारूप बदलने का कोई तरीका है? मुझे पता है कि मैं plt.bar विधि के साथ एक चार्ट बना सकता हूं, लेकिन मुझे अधिक जटिल डेटा के लिए पांडा स्टैक्ड बार चार्ट का उपयोग करने की आवश्यकता है।

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import numpy as np 
import pandas as pd 
import datetime as dt 
import time 

n=20 
duration=1000 
now=time.mktime(time.localtime()) 
timestamps=np.linspace(now,now+duration,n) 
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps] 
values=np.sin((timestamps-now)/duration*2*np.pi) 
data=pd.Series(values, index=dates) 

fig=figure(figsize(5,5)) 
ax=fig.add_subplot(111) 
data.plot(kind='bar') 
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S')) 

उत्तर

17

के बाद से पांडा बस matplotlib आप निश्चित रूप से matplotlib के साथ एक समान (खड़ी) barchart बना सकते हैं का उपयोग करता है। ऐसा कोई कारण नहीं है कि आप केवल इसके लिए पांडों का उपयोग क्यों कर सकते हैं।

हालांकि यह इस मामले में मदद नहीं करेगा। Matplotlib के bar() तारीखों से फ्लोट तक xvalues ​​बदलता है, इसलिए DateFormatter अब और काम नहीं करता है। आप ax.get_xticks() के साथ xticks की जांच कर सकते हैं।

मैं देख रहा हूँ आप कैसे xticks दिनांकों कर सकते हैं नहीं है, लेकिन आप अपने आप को xticklabels ओवरराइड कर सकते हैं:

ax.set_xticklabels([dt.strftime('%Y-%m-%d %H:%M:%S') for dt in data.index.to_pydatetime()]) 
+0

धन्यवाद में जोड़ देंगे। मैं पांडा प्लॉट के लिए भी 'ax.set_xticklabels' कार्यों का उपयोग करके देखता हूं। – KLI

+0

यह पांडा डेटाफ्रेम के लिए काम नहीं करता है जिसे 'groupby' द्वारा समूहीकृत किया गया है:' विशेषताइरर: 'मल्टीइंडेक्स' ऑब्जेक्ट में कोई विशेषता नहीं है 'to_pydatetime' – mjp

0

आप groupby का उपयोग कर अपने डेटा वर्गीकृत किया है, तो आप का उपयोग करके उपरोक्त जवाब के रूप में एक ही बात कर सकते हैं :

new_ticks = [] 
for dt in data.index: 
    new_ticks.append(datetime.datetime(dt[0],dt[1],1)) 
ax.set_xticklabels([dt.strftime('%Y-%m') for dt in new_ticks]) 

मेरा अभिव्यक्त किया और महीने के आधार पर वर्गीकृत किया तो index टपल केवल उदाहरण के लिए (2009,4) था। जाहिर है, अगर आपके पास अपने टुपल (यानी दिन, घंटा) के लिए अधिक पहलू हैं तो आप उन्हें डेटाटाइम फ़ंक्शन

संबंधित मुद्दे