43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
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):
|
|
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 = self.get_event_datetime(event, options)
|
|
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)
|