def control_panel_view(request, code_id): if (request.user.is_authenticated): lab = LabCode.objects.get(id=code_id) name = lab.code dict = { 'id': code_id, 'code_id_json': mark_safe(json.dumps(code_id)), 'name': name, 'content_access': lab.content_access, 'quiz_access': lab.quiz_access, 'content_time': "", 'end_time': "" } data = { 'grade': [], '1': [], '2': [], '3': [], '4': [], 'computer': [] } for participant in LabProgress.objects.filter(code=code_id): if participant.quiz != 0.0: data['computer'].append({ 'id': participant.id, 'computer': participant.computer }) data[participant.group].append(participant.quiz) data['grade'].append(participant.quiz) fig2 = Figure() canvas = FigureCanvas(fig2) ax1 = fig2.add_subplot(121) ax2 = fig2.add_subplot(122) # fig2, ax = plt.subplots(1,2) fig2.set_size_inches(14, 5) labels = ["Paper", "PDF", "Interactive", "Interactive + Gamification"] for i in range(1, 5): try: sns.distplot(data[str(i)], label=labels[i - 1], ax=ax2) # sns.distplot(data[str(i)], label=labels[i-1], ax=ax[1]) except: pass try: sns.distplot(data['grade'], label="Total", ax=ax1) # sns.distplot(data['grade'], label="Total", ax=ax[0]) except: pass ax2.set_title("Grade Distribution per Treatment") ax1.set_title("Total Grade Distribution") ax1.legend() ax2.legend() # ax[1].set_title("Grade Distribution per Treatment") # ax[0].set_title("Total Grade Distribution") # ax[0].legend() # ax[1].legend() fig2.pad_inches = 0 buf = io.BytesIO() fig2.savefig(buf, format='png', bbox_inches='tight') buf.seek(0) string = base64.b64encode(buf.read()) uri = 'data:image/png;base64,' + urllib.parse.quote(string) dict['image'] = uri # Load Survey results data['surveys'] = [] surveys = SurveyData.objects.filter(code=lab) for entry in surveys.values(): entry['date'] = "" for x in data['computer']: if x['id'] == entry['lab_data_id']: entry['computer'] = x['computer'] break for i in range(1, 20): try: entry['s' + str(i)] = json.loads(entry['s' + str(i)]) except: pass data['surveys'].append(entry) dict['surveys'] = json.dumps(json.dumps(data['surveys'])) if lab.content_time: dict['content_time'] = lab.content_time dict['end_time'] = lab.content_time + timedelta(minutes=30) dict['duration'] = 30 return render(request, 'admin/control_panel.html', dict) else: return redirect('home')