153 lines
4.4 KiB
Python
153 lines
4.4 KiB
Python
from matplotlib import pyplot as plt
|
|
from matplotlib.dates import WeekdayLocator, DayLocator, HourLocator, DateFormatter, drange, MONDAY
|
|
import numpy as np
|
|
from user import User
|
|
from database import *
|
|
|
|
def plot_total(user = None):
|
|
|
|
today = datetime.date.today()
|
|
delta = datetime.timedelta(days=1)
|
|
begin = datetime.date.today() - datetime.timedelta(weeks=4)
|
|
dates = drange(begin, today, delta)
|
|
|
|
# all_consumptions = list(10)
|
|
# for consumptions in all_consumptions: #todo fix
|
|
# consumptions = np.zeros(len(dates))
|
|
|
|
|
|
allconsumptions = [[0 for x in range(len(dates))] for product in get_products()]
|
|
print allconsumptions
|
|
# allconsumptions = ()
|
|
# allconsumptions = allconsumptions + (np.zeros(len(dates)))
|
|
#print consumptions
|
|
|
|
consumed = get_consumed()
|
|
for consumption in consumed:
|
|
if user == None or consumption.consumer == user.id:
|
|
i = 1
|
|
for consumptions in allconsumptions:
|
|
if consumption.prodnr == i:
|
|
if consumption.time.date() > begin:
|
|
consumptions[(consumption.time.date() - begin).days - 1] += 1
|
|
i += 1
|
|
plt.xkcd()
|
|
|
|
print allconsumptions
|
|
fig, ax = plt.subplots()
|
|
i=1
|
|
|
|
for consumptions in allconsumptions:
|
|
ax.plot(dates, consumptions, linestyle='-', marker='', label=get_product_by_id(i).name)
|
|
i += 1
|
|
|
|
ax.legend(loc=2,prop={'size':15})
|
|
|
|
# ax.axes.margins = 1 # x margin. See `axes.Axes.margins`
|
|
# ax.axes.ymargin = 1 # y margin See `axes.Axes.margins`
|
|
|
|
plt.xticks(rotation='vertical')
|
|
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
|
|
ax.yaxis.set_ticks_position('left')
|
|
ax.xaxis.set_ticks_position('bottom')
|
|
|
|
plt.tick_params(which='minor', length=4)
|
|
plt.tick_params(which='major', length=5)
|
|
|
|
#ax.xaxis.set_major_locator(WeekdayLocator(MONDAY))
|
|
#ax.xaxis.set_major_locator(DayLocator())
|
|
ax.xaxis.set_major_formatter(DateFormatter('%d.%m'))
|
|
#ax.xaxis.set_minor_formatter(DateFormatter('%d.%m'))
|
|
|
|
#ax.fmt_xdata = DateFormatter('%d.%m')
|
|
fig.autofmt_xdate()
|
|
|
|
plt.annotate(
|
|
'THE DAY I REALIZED\nI COULD COOK BACON\nWHENEVER I WANTED',
|
|
xy=(30, 1), arrowprops=dict(arrowstyle='->'), xytext=(15, -10))
|
|
|
|
plt.xlabel('Datum')
|
|
plt.ylabel('Konsumate')
|
|
|
|
if user == None:
|
|
tit = "Bierkonsum FET"
|
|
fils = "app/static/total.png"
|
|
fill = "app/static/total_big.png"
|
|
else:
|
|
tit = "Bierkonsum %s" % user.name
|
|
fils = "app/static/total%03d.png" % user.id
|
|
fill = "app/static/total%03d_big.png" % user.id
|
|
plt.title(tit)
|
|
|
|
#480x320
|
|
fig.set_size_inches(4.8, 3.2)
|
|
plt.savefig(fils, dpi=100)
|
|
|
|
fig.set_size_inches(4.8, 3.2)
|
|
plt.savefig(fill, dpi=400)
|
|
|
|
def plot_list(duration):
|
|
|
|
today = datetime.date.today()
|
|
begin = datetime.date.today() - datetime.timedelta(weeks=duration)
|
|
|
|
users = get_users()
|
|
#consumptions = [0 for user in users]
|
|
allconsumptions = [[0 for user in users] for product in get_products()]
|
|
|
|
consumed = get_consumed()
|
|
for consumption in consumed:
|
|
allconsumptions[consumption.prodnr-1][consumption.consumer-1] += 1
|
|
|
|
#print 'debug ------------------'
|
|
#print consumptions
|
|
#print '------------------------'
|
|
|
|
plt.xkcd()
|
|
|
|
fig, ax = plt.subplots()
|
|
|
|
colors = ['red','green','blue']
|
|
|
|
i=0
|
|
for consumptions in allconsumptions:
|
|
ax.barh(np.arange(len(consumptions)), consumptions, label=get_product_by_id(i+1).name, align='center', height=0.5, color=colors[i])
|
|
i+=1
|
|
|
|
names = list()
|
|
|
|
for user in users:
|
|
names.append(user.longname)
|
|
|
|
plt.yticks(np.arange(len(names)), names)
|
|
|
|
ax.legend(loc=2)
|
|
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
|
|
ax.yaxis.set_ticks_position('none')
|
|
ax.xaxis.set_ticks_position('none')
|
|
plt.subplots_adjust(left=0.2)
|
|
#plt.tick_params(which='minor', length=4)
|
|
#plt.tick_params(which='major', length=5)
|
|
|
|
#plt.annotate(
|
|
# 'THE DAY I REALIZED\nI COULD COOK BACON\nWHENEVER I WANTED',
|
|
# xy=(30, 1), arrowprops=dict(arrowstyle='->'), xytext=(15, -10))
|
|
|
|
plt.xlabel('Konsumate')
|
|
#plt.ylabel('Konsumate')
|
|
|
|
plt.title("Bierliste")
|
|
|
|
#1024x768
|
|
fig.set_size_inches(10.24, 7.68)
|
|
plt.savefig('app/static/bierliste.png', dpi=100)
|
|
#800x600
|
|
fig.set_size_inches(12, 8)
|
|
plt.savefig('app/static/bierliste_small.png', dpi=72)
|