2016-02-28 82 views
-1

如何在x轴上使用Sqlite数据库中的日期来使用matplotlib创建条形图?将日期转换为matplotlib图

如果我转换之日起,以Unix时间戳的图形作品,但我想获得这样的事:http://i.stack.imgur.com/ouKBy.png

lowestNumber = self.c.execute('SELECT number,date, time FROM testDB ORDER BY number ASC LIMIT 1') 
     for rows in lowestNumber: 
      datesLow = rows[1]#returns 2016-02-23 
      splitDate = datesLow.split('-') 
      spaces = "" 
      # tabs = '/' 
      # tabsDatesLow = tabs.join(splitDate) 
      joinDatesLow = spaces.join(splitDate) 

      x = int(joinDatesLow) 

      plt.bar(x,low, label="Minimum number of players", color="red") 
      plt.show() 

回答

0

您必须在matplotlib绘制日期的整数时间格式,然后传递日期格式化对象以格式化轴。 Matplotlib的date2num函数可以为你做到这一点。另一个很好的例子是Matplotlib的文档,这里有一个例子:http://matplotlib.org/examples/pylab_examples/date_demo1.html。以下是您可能会发现的解决方案:

import datetime 
import matplotlib.pyplot as plt 
from matplotlib.dates import AutoDateLocator, AutoDateFormatter, date2num 

#make my own data: 
date = '2016-02-23' 
low = 10 

#how to format dates: 
date_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') 
int_date = date2num(date_datetime) 

#create plots: 
fig, ax = plt.subplots() 

#plot data: 
ax.bar(int_date,low, label="Minimum number of players", color="red") 

#format date strings on xaxis: 
locator = AutoDateLocator() 
ax.xaxis.set_major_locator(locator) 
ax.xaxis.set_major_formatter(AutoDateFormatter(locator)) 

#adjust x limits and apply autoformatter fordisplay of dates 
min_date = date2num(datetime.datetime.strptime('2016-02-16', '%Y-%m-%d')) 
max_date = date2num(datetime.datetime.strptime('2016-02-28', '%Y-%m-%d')) 
ax.set_xlim([min_date, max_date]) 
fig.autofmt_xdate() 

#show plot: 
plt.show()