From fde8f61435dca6cd7d32ad822cb17034229465ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 15 Aug 2018 12:26:56 +0200 Subject: [PATCH] add violin plots python manage.py violins --module combo,wcs,authentic --datemin 2018-01-01 --events redmine --- eodb/events/management/commands/violins.py | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 eodb/events/management/commands/violins.py diff --git a/eodb/events/management/commands/violins.py b/eodb/events/management/commands/violins.py new file mode 100644 index 0000000..dd80e53 --- /dev/null +++ b/eodb/events/management/commands/violins.py @@ -0,0 +1,46 @@ +import matplotlib.pyplot as plt +import numpy as np + +from .common import GraphCommand + + +import random +import numpy as np + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +class Command(GraphCommand): + + def handle(self, *args, **options): + datetime_var = 'author_datetime' + if options.get('committime'): + datetime_var = 'commit_datetime' + + data = [] + zones = [] + for i, (legend, serie) in enumerate(self.get_series(options)): + zones.append(legend) + events = [] + data.append(events) + for event in serie: + event_date = getattr(event, datetime_var) + hour = event_date.hour + if hour < 5: + hour += 24 + minute = event_date.minute + events.append(hour + minute / 60.0) + + plt.figure() + ax = plt.subplot() + + plt.violinplot(data, widths=0.7, + showmeans=True, showextrema=True, showmedians=True) + + ax.set_xticks(range(1, len(zones)+1)) + ax.set_xticklabels(zones) + ax.set_yticks(range(5, 29)) + ax.set_yticklabels(range(5, 24) + range(0, 5)) + + self.plot(options)