aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbWF0cGxvdGxpYgoKIyDorr7nva7kuK3mlofmraPluLjmmL7npLoKbWF0cGxvdGxpYi5yY1BhcmFtc1snZm9udC5zYW5zLXNlcmlmJ10gPSBbJ1NpbUhlaSddCm1hdHBsb3RsaWIucmNQYXJhbXNbJ2F4ZXMudW5pY29kZV9taW51cyddID0gRmFsc2UKCiMgPT09PT09PT09PSDlm74x77ya5q+P5pel552h55yg5pe26ZW/5YiG5biDIOmlvOWbviA9PT09PT09PT09CnBsdC5maWd1cmUoZmlnc2l6ZT0oOCwgNikpCmxhYmVscyA9IFsnN+Wwj+aXtuWPiuS7peS4iicsICc2LTflsI/ml7YnLCAn5LiN6LazNuWwj+aXtiddCnNpemVzID0gWzM3LjIsIDQxLjIsIDIxLjZdCmNvbG9ycyA9IFsnIzY2YjNmZicsICcjOTlmZjk5JywgJyNmZjk5OTknXQpleHBsb2RlID0gKDAuMDIsIDAuMDIsIDAuMDUpCgpwbHQucGllKHNpemVzLCBleHBsb2RlPWV4cGxvZGUsIGxhYmVscz1sYWJlbHMsIGNvbG9ycz1jb2xvcnMsCiAgICAgICAgYXV0b3BjdD0nJTEuMWYlJScsIHNoYWRvdz1GYWxzZSwgc3RhcnRhbmdsZT05MCkKcGx0LnRpdGxlKCflpKflrabnlJ/mr4/ml6XnnaHnnKDml7bplb/liIbluIPvvIhuPTMwMe+8iScsIGZvbnRzaXplPTE0KQpwbHQuYXhpcygnZXF1YWwnKQpwbHQuc2F2ZWZpZygn552h55yg5pe26ZW/5YiG5biD6aW85Zu+LnBuZycsIGRwaT0zMDAsIGJib3hfaW5jaGVzPSd0aWdodCcpCnBsdC5jbG9zZSgpCgojID09PT09PT09PT0g5Zu+Mu+8muS4u+imgeedoeecoOmXrumimOWNoOavlCDmn7Hnirblm74gPT09PT09PT09PQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDYpKQpwcm9ibGVtcyA9IFsn5YWl552h5Zuw6Zq+JywgJ+WknOmXtOaYk+mGkiddCnJhdGVzID0gWzQ3LjUsIDMyLjldCmJhcnMgPSBwbHQuYmFyKHByb2JsZW1zLCByYXRlcywgY29sb3I9WycjNGM3MmIwJywgJyM1NWE4NjgnXSwgd2lkdGg9MC41KQoKZm9yIGJhciBpbiBiYXJzOgogICAgaGVpZ2h0ID0gYmFyLmdldF9oZWlnaHQoKQogICAgcGx0LnRleHQoYmFyLmdldF94KCkgKyBiYXIuZ2V0X3dpZHRoKCkvMi4sIGhlaWdodCwKICAgICAgICAgICAgIGYne2hlaWdodH0lJywgaGE9J2NlbnRlcicsIHZhPSdib3R0b20nLCBmb250c2l6ZT0xMSkKCnBsdC50aXRsZSgn5aSn5a2m55Sf5Li76KaB552h55yg6Zeu6aKY5Y2g5q+U77yIbj0zMDHvvIknLCBmb250c2l6ZT0xNCkKcGx0LnlsYWJlbCgn5Y2g5q+U77yIJe+8iScsIGZvbnRzaXplPTEyKQpwbHQueWxpbSgwLCA1NSkKcGx0LnNhdmVmaWcoJ+edoeecoOmXrumimOWNoOavlOafseeKtuWbvi5wbmcnLCBkcGk9MzAwLCBiYm94X2luY2hlcz0ndGlnaHQnKQpwbHQuY2xvc2UoKQoKIyA9PT09PT09PT09IOWbvjPvvJrnhqzlpJzkuLvopoHljp/lm6Ag5p+x54q25Zu+ID09PT09PT09PT0KcGx0LmZpZ3VyZShmaWdzaXplPSg5LCA2KSkKcmVhc29ucyA9IFsn5Yi355+t6KeG6aKRL+ekvuS6pOW5s+WPsCcsICflrozmiJDlrabkuJrku7vliqEnLCAn5YW25LuW5Y6f5ZugJ10KcmVhc29uX3JhdGVzID0gWzQ4LjUsIDMyLjIsIDE5LjNdCmJhcnMgPSBwbHQuYmFyKHJlYXNvbnMsIHJlYXNvbl9yYXRlcywgY29sb3I9WycjYzQ0ZTUyJywgJyNkZDg0NTInLCAnIzgxNzJiMyddLCB3aWR0aD0wLjYpCgpmb3IgYmFyIGluIGJhcnM6CiAgICBoZWlnaHQgPSBiYXIuZ2V0X2hlaWdodCgpCiAgICBwbHQudGV4dChiYXIuZ2V0X3goKSArIGJhci5nZXRfd2lkdGgoKS8yLiwgaGVpZ2h0LAogICAgICAgICAgICAgZid7aGVpZ2h0fSUnLCBoYT0nY2VudGVyJywgdmE9J2JvdHRvbScsIGZvbnRzaXplPTExKQoKcGx0LnRpdGxlKCflpKflrabnlJ/nhqzlpJzkuLvopoHljp/lm6DliIbluIPvvIhuPTMwMe+8iScsIGZvbnRzaXplPTE0KQpwbHQueWxhYmVsKCfljaDmr5TvvIgl77yJJywgZm9udHNpemU9MTIpCnBsdC55bGltKDAsIDU1KQpwbHQuc2F2ZWZpZygn54as5aSc5Y6f5Zug5YiG5biD5p+x54q25Zu+LnBuZycsIGRwaT0zMDAsIGJib3hfaW5jaGVzPSd0aWdodCcpCnBsdC5jbG9zZSgpCgojID09PT09PT09PT0g5Zu+NO+8muedoeecoOi0qOmHj+S4jueEpuiZkeaDhee7quWvueavlCDmn7Hnirblm74gPT09PT09PT09PQpwbHQuZmlndXJlKGZpZ3NpemU9KDgsIDYpKQpncm91cHMgPSBbJ+edoeecoOi0qOmHj+W3ruWtpueUnycsICfnnaHnnKDoia/lpb3lrabnlJ8nXQphbnhpZXR5X3JhdGVzID0gWzY3LjIsIDIxLjRdCmJhcnMgPSBwbHQuYmFyKGdyb3VwcywgYW54aWV0eV9yYXRlcywgY29sb3I9WycjZTE1NzU5JywgJyM3NmI3YjInXSwgd2lkdGg9MC41KQoKZm9yIGJhciBpbiBiYXJzOgogICAgaGVpZ2h0ID0gYmFyLmdldF9oZWlnaHQoKQogICAgcGx0LnRleHQoYmFyLmdldF94KCkgKyBiYXIuZ2V0X3dpZHRoKCkvMi4sIGhlaWdodCwKICAgICAgICAgICAgIGYne2hlaWdodH0lJywgaGE9J2NlbnRlcicsIHZhPSdib3R0b20nLCBmb250c2l6ZT0xMSkKCnBsdC50aXRsZSgn5LiN5ZCM552h55yg576k5L2T54Sm6JmR5oOF57uq5Y2g5q+U5a+55q+U77yIbj0zMDHvvIknLCBmb250c2l6ZT0xNCkKcGx0LnlsYWJlbCgn57uP5bi454Sm6JmR5Y2g5q+U77yIJe+8iScsIGZvbnRzaXplPTEyKQpwbHQueWxpbSgwLCA3NSkKcGx0LnNhdmVmaWcoJ+edoeecoOS4jueEpuiZkeWvueavlOWbvi5wbmcnLCBkcGk9MzAwLCBiYm94X2luY2hlcz0ndGlnaHQnKQpwbHQuY2xvc2UoKQoKcHJpbnQoJnF1b3Q7NOW8oOaVsOaNruWbvuW3sueUn+aIkO+8jOS/neWtmOWcqOW9k+WJjeaWh+S7tuWkueS4rSZxdW90OykK
import matplotlib.pyplot as plt
import matplotlib
# 设置中文正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
# ========== 图1:每日睡眠时长分布 饼图 ==========
plt.figure(figsize=(8, 6))
labels = ['7小时及以上', '6-7小时', '不足6小时']
sizes = [37.2, 41.2, 21.6]
colors = ['#66b3ff', '#99ff99', '#ff9999']
explode = (0.02, 0.02, 0.05)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=False, startangle=90)
plt.title('大学生每日睡眠时长分布(n=301)', fontsize=14)
plt.axis('equal')
plt.savefig('睡眠时长分布饼图.png', dpi=300, bbox_inches='tight')
plt.close()
# ========== 图2:主要睡眠问题占比 柱状图 ==========
plt.figure(figsize=(8, 6))
problems = ['入睡困难', '夜间易醒']
rates = [47.5, 32.9]
bars = plt.bar(problems, rates, color=['#4c72b0', '#55a868'], width=0.5)
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height}%', ha='center', va='bottom', fontsize=11)
plt.title('大学生主要睡眠问题占比(n=301)', fontsize=14)
plt.ylabel('占比(%)', fontsize=12)
plt.ylim(0, 55)
plt.savefig('睡眠问题占比柱状图.png', dpi=300, bbox_inches='tight')
plt.close()
# ========== 图3:熬夜主要原因 柱状图 ==========
plt.figure(figsize=(9, 6))
reasons = ['刷短视频/社交平台', '完成学业任务', '其他原因']
reason_rates = [48.5, 32.2, 19.3]
bars = plt.bar(reasons, reason_rates, color=['#c44e52', '#dd8452', '#8172b3'], width=0.6)
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height}%', ha='center', va='bottom', fontsize=11)
plt.title('大学生熬夜主要原因分布(n=301)', fontsize=14)
plt.ylabel('占比(%)', fontsize=12)
plt.ylim(0, 55)
plt.savefig('熬夜原因分布柱状图.png', dpi=300, bbox_inches='tight')
plt.close()
# ========== 图4:睡眠质量与焦虑情绪对比 柱状图 ==========
plt.figure(figsize=(8, 6))
groups = ['睡眠质量差学生', '睡眠良好学生']
anxiety_rates = [67.2, 21.4]
bars = plt.bar(groups, anxiety_rates, color=['#e15759', '#76b7b2'], width=0.5)
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{height}%', ha='center', va='bottom', fontsize=11)
plt.title('不同睡眠群体焦虑情绪占比对比(n=301)', fontsize=14)
plt.ylabel('经常焦虑占比(%)', fontsize=12)
plt.ylim(0, 75)
plt.savefig('睡眠与焦虑对比图.png', dpi=300, bbox_inches='tight')
plt.close()
print("4张数据图已生成,保存在当前文件夹中")