背景
旭日图是一种多层级的数据可视化工具,通过从中心向外扩展的圆环结构来展示不同层级的分类和占比,每一层的圆环代表数据的一个层级或类别,越靠外层的数据通常表示层级越深,旭日图的作用是帮助直观地理解复杂数据在各层级中的分布情况,便于快速识别各类别的比例关系和结构,它在多层次数据的展示中尤为实用,比如在展示不同群体的背景信息或对某工具的多维评价时,可以一目了然地看到整体分布和每层的细节
这篇文章的灵感来源于一篇关于房颤危重病人住院死亡率预测模型的期刊文章,图A展示的是一个预测模型的界面,用于评估住院期间患有房颤的危重病人的死亡率,图B和图C是对图A所展示模型工具的辅助分析和评价:
- 图B显示了使用该模型的医疗专家的背景信息,例如工作年限、学历、所属部门、职称和所属医院。通过这些数据,可以了解模型用户的构成情况,确保模型的适用性和专业性
- 图C展示了专家们对模型工具的不同维度的评价,包括便利性、可信度、可解释性和预测准确性,这帮助理解模型在实际应用中的用户反馈和可靠性
通过图B和图C这种旭日图进一步分析和展示图A中模型的使用背景和评价情况,为模型的可信度和实用性提供更多支持信息
代码实现
C图绘制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import pandas as pd
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
# 读取数据为DataFrame 第一列作为索引
df = pd.read_excel('2024-11-14公众号Python机器学习AI.xlsx', index_col=0)
categories = df.index.tolist()
colors = ['#CCE5FF', '#FFD1B2', '#FFFFCC']
layers = [df[col].tolist() for col in df.columns]
# 创建图形
fig, ax = plt.subplots(figsize=(8, 8), dpi=1200)
radius = 1.8 # 初始半径
width = 0.3 # 每层的宽度
for i, layer in enumerate(layers):
wedges, _ = ax.pie(
layer, radius=radius, colors=colors, labels=['']*len(layer), startangle=90,
wedgeprops=dict(width=width, edgecolor='black', linewidth=1.5))
# 手动放置每个百分比标签
for j, wedge in enumerate(wedges):
angle = (wedge.theta2 - wedge.theta1) / 2.0 + wedge.theta1
x = radius * 0.9 * np.cos(np.radians(angle))
y = radius * 0.9 * np.sin(np.radians(angle))
ax.text(x, y, f"{layer[j]}%", ha='center', va='center', fontsize=10, color="black")
radius -= width # 调整下一层的半径
# 添加中心白色圆
center_circle = plt.Circle((0, 0), 0.6, facecolor='white', edgecolor='black', linewidth=1.5)
ax.add_artist(center_circle)
plt.text(0, 0, 'Total:\n81', ha='center', va='center', fontsize=16, weight='bold')
# 图例
legend_patches = [
mpatches.Patch(color=colors[i], label=categories[i]) for i in range(len(categories))
]
plt.legend(handles=legend_patches, loc='center left', bbox_to_anchor=(1.2, 1))
plt.savefig("updated_chart——2.pdf", format='pdf', bbox_inches='tight')
plt.show()
使用Matplotlib库绘制一个嵌套饼图(旭日图),用于展示多层级的百分比数据,首先,Excel文件中读取数据,并将第一列作为索引,用于生成每层的标签,然后,通过循环创建每一层的饼图,设置半径和宽度,实现层层嵌套的效果,同时,在每个扇形上方手动添加百分比标签,以提高可读性,中心位置添加一个白色圆圈,并在其上标注总计信息,此外,代码生成图例,展示每一层的类别标签,对于剩下的4个维度(便利性、可信度、可解释性和预测准确性)利用PPT等P图软件添加上即可,相对于代码绘制线条更方便,当然也可以参考下文的B图绘制,用不同的颜色映射、图例去表示
相较于B图,C图的绘制难度稍低,因此这里优先绘制C图,C图展示的是专家对模型工具的评价,包括便利性、可信度、可解释性和预测准确性四个维度,每个维度的评价分为“非常好”、“好”和“一般”三个等级
相比之下,B图包含了更多类别和层级,如工作年限、学历、部门、医学资质和医院分布等,因此数据结构更复杂,绘制难度更大,通过先绘制C图,可以熟悉旭日图的绘制过程,如层级和标签的布局方式,为更复杂的B图打下基础
B图绘制
通过对C图的代码绘制学习,可以熟悉嵌套饼图(旭日图)的绘制方法,如设置每层的半径和宽度、添加百分比标签等细节。这些步骤为绘制更复杂的B图奠定了基础。绘制B图时,我们可以应用相同的方法,但需要注意以下区别:
- 颜色映射:B图包含更多类别,每个类别都有独特的颜色映射,以便在视觉上区分不同层级的数据
- 图例展示:与C图相比,B图的图例更复杂,需要为每个类别的各个子类别添加相应的标签。这要求在图例中对每个分组使用不同的颜色,并调整每组图例的展示位置,以确保清晰易读
通过先掌握C图的简单结构,再应用到B图中,可以逐步提高对复杂多层数据的可视化能力,代码与数据集获取:如需获取本文完整的源代码和数据集,请添加作者微信联系
往期推荐
复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性
复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展
复现Nature图表——基于PCA降维与模型预测概率的分类效果可视化
SCI图表复现:如何直观展示机器学习模型预测结果的准确性和一致性
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考