time.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import matplotlib.pyplot as plt
  2. import os
  3. def convert_time(sec):
  4. return sec//60 ,sec%60
  5. async def get_time_stats_diagram(task_number, min_time, max_time, avg_time, recomend_time):
  6. # Make figure and axes
  7. fig, ax = plt.subplots(1, 1)
  8. basic_params = {"fontweight":650}
  9. header_params = {"color" : "#42b8f6","fontweight":900}
  10. time_params = {"color": "#ffffff", "fontweight": 900,"fontsize": 15}
  11. ax.set_title(f"Статистика по задаче {task_number}", fontsize=20,**header_params)
  12. ax.text(-0.1, 0.9, f"Минимальное время", fontsize=15,**basic_params, color="#0288cc")
  13. ax.text(0.56, 0.9, f" {convert_time(min_time)[0]}мин {convert_time(min_time)[1]}сек", **time_params)
  14. ax.text(-0.1, 0.7, f"Максимальное время", fontsize=15,**basic_params, color="#836fed")
  15. ax.text(0.56, 0.7, f" {convert_time(max_time)[0]}мин {convert_time(max_time)[1]}сек", **time_params)
  16. ax.text(-0.1, 0.5, f"Среднее время ", fontsize=15,**basic_params, color="#6669ba")
  17. ax.text(0.56, 0.5, f" {convert_time(avg_time)[0]}мин {convert_time(avg_time)[1]}сек", **time_params)
  18. ax.text(-0.1, 0.25, f"Рекомендуемое время", fontsize=15,**basic_params, color="#b865fa")
  19. ax.text(0.56, 0.25, f" {convert_time(recomend_time)[0]}мин {convert_time(recomend_time)[1]}сек", **time_params)
  20. if recomend_time < avg_time:
  21. ax.text(0, 0.02, f"Есть, над чем работать, но в целом неплохо.", fontsize=12,**basic_params, color="#cc61ff")
  22. if recomend_time >= avg_time:
  23. ax.text(0, 0.02, f"Отличный результат. Продолжай в том же духе.", fontsize=12,**basic_params, color="#cc61ff")
  24. ax.spines['left'].set_visible(False)
  25. ax.spines['bottom'].set_visible(False)
  26. ax.spines['right'].set_visible(False)
  27. ax.spines['top'].set_visible(False)
  28. ax.set_axis_off()
  29. #ax.set_xlabel(result, fontsize=12)
  30. #
  31. ## A standard pie plot
  32. #patches, texts, autotexts = ax.pie(values,
  33. # autopct='%.0f%%',
  34. # textprops={'size': 'larger'},
  35. # shadow=False, radius=0.95,
  36. # explode=(0, 0.05))
  37. #
  38. #ax.legend(labels, loc='upper left', bbox_to_anchor=(0.7, 0.8))
  39. #plt.setp(autotexts, size='x-large')
  40. # getting bytes from image
  41. plt.savefig('data/temp_task_files/task_stats.png', facecolor="black")
  42. byte_img = open('data/temp_task_files/task_stats.png', mode='rb').read()
  43. plt.close()
  44. return byte_img