from jchart import Chart from jchart.config import Axes, DataSet, rgba, Tick from random import randint class TimeChart(Chart): """ Class to configure the N-Gramm Viewer line chart over time. The class function get_datasets() is used to get the data sets and creates one data set for each. """ chart_type = "line" responsive = True scales = { 'xAxes': [Axes(type='time', position="bottom")], } def __init__(self): super(TimeChart, self).__init__() self.data_sets = None def get_datasets(self, **kwargs): if kwargs is not None: for key, value in kwargs.items(): self.data_sets = value lable_names = [] data_sets = [] for dict in self.data_sets: for key, value in dict.items(): lable_names.append(key) data_sets.append(value) data_set_objects = [] for lable_name, data_set in zip(lable_names, data_sets): data_set_objects.append(DataSet(type="line", label=lable_name, borderColor=rgba(randint(0,255), randint(0,255), randint(0,255)), data=data_set, lineTension=0)) return data_set_objects class BarChart(Chart): """ Class to configure the N-Gramm Viewer bar chart per speaker. The class function get_datasets() is used to get the data sets and creates one data set for each. """ chart_type = "horizontalBar" responsive = True def __init__(self, speaker_range=10): super(BarChart, self).__init__() self.data_sets = None self.speaker_range = int(speaker_range) self.lable_names = [] self.bar_data = [] self.bar_names = [] def get_labels(self): try: tmp_list = self.lable_names self.lable_names = sum(tmp_list, [])[:self.speaker_range] except TypeError as e: pass return self.lable_names def create_data(self, **kwargs): if kwargs is not None: for key, value in kwargs.items(): self.data_sets = value for d in self.data_sets: entry_lable_names = [] entry_bar_data = [] entry_bar_name = [] for key, value in d.items(): for set in value: entry_lable_names.append(set["x"]) entry_bar_data.append(set["y"]) self.lable_names.append(entry_lable_names) entry_bar_name.append(key) self.bar_names.extend(entry_bar_name) entry_bar_data = entry_bar_data[:self.speaker_range] self.bar_data.append(entry_bar_data[:self.speaker_range]) def get_datasets(self): data_set_objects = [] for bar_data, bar_name in zip(self.bar_data, self.bar_names): data_set_objects.append(DataSet(type="horizontalBar", label=bar_name, backgroundColor=rgba(randint(0,255), randint(0,255), randint(0,255)), data=bar_data[:self.speaker_range])) return data_set_objects