抱歉,我之前的回答有误。在雷达图中,每个类别应该对应一个数值,而不是绘制两条线段。下面是修正后的代码:
import json
import numpy as np
import matplotlib.pyplot as plt
# 从JSON文件中读取数据
with open('近5天新增和流失用户数据.json', 'r') as file:
data = json.load(file)
# 提取数据
categories = data["类型"]
dates = data["日期"]
new_users = data["新增人数"]
lost_users = data["流失人数"]
# 创建一个范围在[0, 2π)的角度列表,并添加第一个角度到末尾以形成闭合图形
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
angles += angles[:1]
# 将新增用户和流失用户转换为百分比(相对于总用户数)
total_users = np.array(new_users) + np.array(lost_users)
percent_new_users = np.array(new_users) / total_users * 100
percent_lost_users = np.array(lost_users) / total_users * 100
# 创建雷达图对象
fig, ax = plt.subplots(figsize=(8, 6), subplot_kw=dict(polar=True))
# 绘制雷达图
ax.plot(angles, percent_new_users, linestyle='-', linewidth=2, label="新增人数")
ax.fill(angles, percent_new_users, alpha=0.25)
ax.plot(angles, percent_lost_users, linestyle='-', linewidth=2, label="流失人数")
ax.fill(angles, percent_lost_users, alpha=0.25)
# 设置刻度标签位置
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
# 添加图例和网格线
plt.legend(loc='upper right')
ax.grid(True)
# 设置标题
plt.title("近5天新增和流失用户分群雷达图")
# 显示图形
plt.show()
请确保将上述代码中的”近5天新增和流失用户数据.json”替换为实际保存数据的JSON文件路径。运行代码后,它将加载JSON数据并生成相应的用户分群雷达图,展示了新增人数和流失人数在不同类别上所占比例。
内容由零声教学AI助手提供,问题来源于学员提问