From 84fa4cc2d29257cb393dfcfcabf9a618d16516a1 Mon Sep 17 00:00:00 2001 From: 2509165005 <2509165005@student.edu.cn> Date: Mon, 6 Jul 2026 14:27:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=20q4=5F1=20=E6=9F=B1?= =?UTF-8?q?=E7=8A=B6=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- q4/q4_1/q4_1.py | 53 ++++++++++++++++--------------------------- q4/q4_1/q4_1_bar.png | Bin 0 -> 11248 bytes 2 files changed, 19 insertions(+), 34 deletions(-) create mode 100644 q4/q4_1/q4_1_bar.png diff --git a/q4/q4_1/q4_1.py b/q4/q4_1/q4_1.py index d6f2f6e..1f5cfc2 100644 --- a/q4/q4_1/q4_1.py +++ b/q4/q4_1/q4_1.py @@ -1,45 +1,30 @@ +# q4_1.py import json import matplotlib.pyplot as plt from collections import Counter -# 设置中文字体(解决中文乱码问题,必加!) -plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体 -plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 +# 读取上级目录的 movies.json +with open("../q4_2/movies.json", "r", encoding="utf-8") as f: + data = json.load(f) -# 1. 读取movies.json数据 -try: - with open('movies.json', 'r', encoding='utf-8') as f: - movies_data = json.load(f) -except FileNotFoundError: - print("错误:未找到movies.json文件,请确认文件在当前目录!") - exit() +movies = data["movies"] -# 2. 统计各类型电影数量(处理多类型分隔,比如"剧情/喜剧"拆分为两个类型) -genre_list = [] -for movie in movies_data: - # 假设movies.json里的类型字段是"genre",如果是其他名称(如"type")请修改 - genres = movie.get('genre', '').split('/') # 按/拆分多类型 - genre_list.extend([g.strip() for g in genres if g.strip()]) # 去空格并过滤空值 +# 统计每个类型有多少部电影 +genres = [m["genre"] for m in movies] +genre_count = Counter(genres) -genre_counter = Counter(genre_list) # 统计各类型数量 +# X轴:类型名称 Y轴:数量 +x = list(genre_count.keys()) +y = list(genre_count.values()) -# 3. 提取X轴(类型)和Y轴(数量)数据 -x_labels = list(genre_counter.keys()) -y_values = list(genre_counter.values()) +# 绘制柱状图 +plt.bar(x, y) -# 4. 绘制柱状图 -plt.figure(figsize=(10, 6)) # 设置画布大小 -plt.bar(x_labels, y_values, color='skyblue') # 用plt.bar绘制柱状图 +# 标题 +plt.title("类型电影数量分布") -# 5. 设置标题和坐标轴(按要求配置) -plt.title("类型电影数量分布", fontsize=14) # 标题 -plt.xlabel("电影类型", fontsize=12) # X轴标签(可选,更清晰) -plt.ylabel("电影数量", fontsize=12) # Y轴标签(可选,更清晰) -plt.xticks(rotation=45, ha='right') # X轴文字旋转,避免重叠(可选优化) -plt.tight_layout() # 自动调整布局,防止文字被截断 +# 保存图片 +plt.savefig("q4_1_bar.png", dpi=150) +plt.close() -# 6. 保存图片(按要求:q4_1_bar.png,dpi=150) -plt.savefig('q4_1_bar.png', dpi=150) -plt.close() # 关闭画布,释放资源 - -print("柱状图绘制完成!已保存为q4_1_bar.png") \ No newline at end of file +print("✅ q4_1 柱状图完成!已生成 q4_1_bar.png") \ No newline at end of file diff --git a/q4/q4_1/q4_1_bar.png b/q4/q4_1/q4_1_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..42549c704430fb9143cfa422b81863e75358f7eb GIT binary patch literal 11248 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 II{NK@0ZIqbRR910 literal 0 HcmV?d00001