diff --git a/gpx2html/__init__.py b/gpx2html/__init__.py
index b01ae73..0ac831e 100755
--- a/gpx2html/__init__.py
+++ b/gpx2html/__init__.py
@@ -13,6 +13,7 @@ import os
import pandas as pd
import collections
from gpx_parser import Tracks
+import pytz
MONTH_LABELS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
@@ -54,9 +55,8 @@ def plot_line_chart(values, ticklabels, title, xlabel, ylabel, filename, xtick_r
Args:
values (dict): key: line name
value (list): line values
- ticklabels (list): Names for the tick labels (must be same length as value list).
+ ticklabels (list): Names for the tick labels.
title (str): Title of the chart.
-
'''
fig = plt.figure()
ax1 = fig.add_subplot(111)
@@ -66,27 +66,27 @@ def plot_line_chart(values, ticklabels, title, xlabel, ylabel, filename, xtick_r
ax1.spines["left"].set_visible(False)
ax1.spines["right"].set_visible(False)
+ step = len(values[min(values.keys())]) / len(ticklabels)
+ ax1.set_xticks(numpy.arange(1, len(ticklabels) * step, step))
+ ax1.set_xticklabels(ticklabels, rotation=xtick_rotation)
+
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
for key in values.keys():
- if len(ticklabels) == len(values[key]):
- plt.plot(ticklabels, values[key], label=key)
- else:
- short_ticklabels = list()
- for i in range(0, len(values[key])):
- short_ticklabels.append(ticklabels[i])
- plt.plot(short_ticklabels, values[key], label=key)
-
- x_base = numpy.arange(len(ticklabels))
- plt.xticks(x_base, ticklabels, rotation=xtick_rotation)
+ plt.plot(values[key], label=key)
plt.legend()
plt.savefig(filename)
plt.close('all')
+def generate_date_list(start_date, end_date):
+ r = (end_date + datetime.timedelta(days=1) - start_date).days
+ return[start_date + datetime.timedelta(days=i) for i in range(r)]
+
+
class Gpx2Html(object):
def __init__(self, infolder, outfolder, logger):
self.logger = logger
@@ -122,26 +122,36 @@ class Gpx2Html(object):
os.path.join(self.outfolder, 'avg_spd.png'))
# Accumulated distance:
- accumulated_distances = dict()
- for year in distances_dict.keys():
- accumulated_distance = list()
- accumulated_distance.append(0)
- for i in range(0, len(distances_dict[year])):
- accumulated_distance.append(accumulated_distance[i] + distances_dict[year][i])
- accumulated_distances[year] = accumulated_distance
-
- current_year = datetime.datetime.today().year
- current_month = datetime.datetime.today().month
- current_year_distance = list()
- self.logger.info("Current month: %s", current_month)
- for i in range(0, current_month + 1):
- current_year_distance.append(accumulated_distances[current_year][i])
- accumulated_distances[current_year] = current_year_distance
-
- plot_line_chart(accumulated_distances, [""] + MONTH_LABELS,
- "accumulated distance", 'Month', 'km',
+ accumulated_distance = dict()
+ for year in self.tracks.years():
+ acc_year_dist = list()
+ start_date = datetime.datetime(year, 1, 1)
+ now = datetime.datetime.now()
+ end_date = datetime.datetime(year, 12, 31)
+ if year == now.year:
+ end_date = now
+ tracks = self.tracks.tracks(start_date, end_date)
+ for date in generate_date_list(start_date, end_date):
+ for track in tracks:
+ if track.start_time.month == date.month and track.start_time.day == date.day:
+ if len(acc_year_dist) < date.timetuple().tm_yday:
+ acc_year_dist.append(track.distance / 1000)
+ else:
+ acc_year_dist.append(track.distance / 1000 + acc_year_dist[-1])
+ elif len(acc_year_dist) < date.timetuple().tm_yday:
+ if len(acc_year_dist) > 0:
+ acc_year_dist.append(acc_year_dist[-1])
+ else:
+ acc_year_dist.append(0)
+ if len(acc_year_dist) == 365:
+ acc_year_dist.append(acc_year_dist[-1])
+ accumulated_distance[year] = acc_year_dist
+ plot_line_chart(accumulated_distance, MONTH_LABELS,
+ "Accumulated Distance", 'Month', 'km',
os.path.join(self.outfolder, 'acc_dist.png'))
+
+
end_date = datetime.datetime.today()
start_date = end_date - datetime.timedelta(days=14)
last_n_tracks = self.tracks.tracks(start_date, end_date)