boxplot_distribution.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import matplotlib.pyplot as plt
  2. #======================================================
  3. # == SCRIPT PARAMETERS ==
  4. #======================================================
  5. # === Basic statistics from the table ===
  6. COL_DIAMETER = "Diameter [mm]"
  7. COL_VELOCITY = "Velocity [m/s]"
  8. STATS = {
  9. COL_DIAMETER: {
  10. "min": 0.160,
  11. "q1": 0.250,
  12. "median": 0.310,
  13. "q3": 0.410,
  14. "max": 4.740
  15. },
  16. COL_VELOCITY: {
  17. "min": 0.210,
  18. "q1": 1.340,
  19. "median": 1.670,
  20. "q3": 2.020,
  21. "max": 10.090
  22. }
  23. }
  24. # === Figure Parameters ===
  25. FIG_WIDTH = 6
  26. FIG_HEIGHT = 4
  27. FIG_TITLE = "Distribúcia Priemerov a Rýchlostí Častíc Počas 41. týžna 2025"
  28. FIG_DATA_ALPHA = 0.6
  29. FIG_SUB1_TITLE = "Priemer Častice [mm]"
  30. FIG_SUB1_X_LABEL = "Priemer [mm]"
  31. FIG_SUB2_TITLE = "Rýchlosť Častice [m/s]"
  32. FIG_SUB2_X_LABEL = "Rýchlosť [m/s]"
  33. FIG_DATA_COLOR1 = "#4C72B0"
  34. FIG_DATA_COLOR2 = "#DD8452"
  35. FIG_GRID_STYLE = ":"
  36. #======================================================
  37. # == SCRIPT COMMANDS ==
  38. #======================================================
  39. # === Prepare data for boxplot ===
  40. def make_box_dict(s):
  41. return {
  42. 'whislo': s['min'], # Bottom whisker
  43. 'q1': s['q1'], # 25%
  44. 'med': s['median'], # 50%
  45. 'q3': s['q3'], # 75%
  46. 'whishi': s['max'], # Top whisker
  47. 'fliers': []
  48. }
  49. data_diam = [make_box_dict(STATS[COL_DIAMETER])]
  50. data_vel = [make_box_dict(STATS[COL_VELOCITY])]
  51. # === Plot side by side with independent y-scales ===
  52. fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(FIG_WIDTH, FIG_HEIGHT))
  53. # Diameter boxplot
  54. ax1.bxp(data_diam, showfliers=False, patch_artist=True,
  55. boxprops=dict(facecolor=FIG_DATA_COLOR1, alpha=FIG_DATA_ALPHA))
  56. ax1.set_title(FIG_SUB1_TITLE)
  57. ax1.set_ylabel(FIG_SUB1_X_LABEL)
  58. ax1.set_xlabel("")
  59. ax1.set_xticks([])
  60. ax1.grid(True, linestyle=FIG_GRID_STYLE)
  61. # Velocity boxplot
  62. ax2.bxp(data_vel, showfliers=False, patch_artist=True,
  63. boxprops=dict(facecolor=FIG_DATA_COLOR2, alpha=FIG_DATA_ALPHA))
  64. ax2.set_title(FIG_SUB2_TITLE)
  65. ax2.set_ylabel(FIG_SUB2_X_LABEL)
  66. ax2.set_xlabel("")
  67. ax2.set_xticks([])
  68. ax2.grid(True, linestyle=FIG_GRID_STYLE)
  69. plt.suptitle(FIG_TITLE)
  70. plt.tight_layout()
  71. plt.show()