ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【matplotlib 实战】--南丁格尔玫瑰图 [打印本页]

作者: 王國慶    时间: 2023-11-2 12:07
标题: 【matplotlib 实战】--南丁格尔玫瑰图
南丁格尔玫瑰图是一种用极坐标下的柱状图或堆叠柱状图来展示数据的图表。
虽然南丁格尔玫瑰图外观类似饼图,但是表示数据的方式不同,它是以半径来表示数值的,
而饼图是以扇形的弧度来表达数据的。
所以,南丁格尔玫瑰图在视觉上会夸大数据的比例,因为半径和面积之间是平方关系。
因此,当需要对比非常相近的数值时,适当的夸大有助于区分数据,但在追求数据准确性时,玫瑰图可能不是最佳选择。
据说,南丁格尔玫瑰图由统计学家和医学改革家佛罗伦萨‧南丁格尔在克里米亚战争期间创造,
用于反映军医院的季节性死亡率,从而推动医院条件的改善。
1. 主要元素

南丁格尔玫瑰图的主要元素包括:

2. 适用的场景

南丁格尔玫瑰图适用的场景包括:
3. 不适用的场景

南丁格尔玫瑰图不适用的场景包括:
4. 分析实战

本次使用 王者荣耀KPL 2023年春季赛的数据,分析各个战队的排名和胜率。
4.1. 数据来源

数据来自王者荣耀官方网站,整理好的数据下载地址:
https://databook.top/wzry/2023-spring
本次分析使用其中 各个战队的相关数据:league-2023春季赛.csv
  1. fp = "d:/share/data/league-2023春季赛.csv"
  2. df = pd.read_csv(fp)
  3. df
复制代码

4.2. 数据清理

原始数据中,字段比较多,提取前10名的战队,用南丁格尔玫瑰图分析其胜率情况。
  1. key = "胜率"
  2. data = df.sort_values("排名")
  3. data = data.reset_index()
  4. #提取前10名,只保留 战队 和 胜率 2个字段
  5. data = data.loc[:9, ["战队", key]]
  6. #胜率字段转换为 float 类型
  7. data[key] = data[key].str.replace("%", "")
  8. data[key] = data[key].astype("float")
  9. data
复制代码

4.3. 分析结果可视化

matplotlib 中没有提供专门绘制南丁格尔玫瑰图的接口,我们可以用极坐标系下的柱状图来模拟。
  1. with plt.style.context("seaborn-v0_8"):
  2.     fig = plt.figure()
  3.     ax = fig.add_axes([0.1, 0.1, 1, 1], polar=True)
  4.     ax.set_theta_offset(np.pi/2)
  5.     ax.set_theta_direction(-1)
  6.     ax.set_rlabel_position(0)
  7.     n = len(data)
  8.     # 每个数据的角度
  9.     angle = np.linspace(0, 2 * np.pi, n, endpoint=False)
  10.     # 绘制用到的数据
  11.     radius = np.array(data[key].tolist())
  12.     ax.yaxis.set_major_locator(plt.NullLocator())
  13.     # x轴刻度显示战队名称
  14.     ax.set_xticks(angle, data["战队"])
  15.     # 中间空出一个孔
  16.     ax.set_ylim(-10, max(data[key]))
  17.     ax.bar(angle, radius, color=plt.cm.tab10.colors, width=0.62)
复制代码

从分析结果可以看出,第一名重庆狼队的胜率明显高出其他的战队,而其他战队的胜率差别不大。
说明目前 王者荣耀KPL联盟中,各个战队的实力比较接近,比赛会非常精彩。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4