
©[悠悠智汇笔记] 版权所有
🙏请尊重劳动成果,守护每一份劳动心血;⚖️未经授权,不得以为任何方式转载、摘编或抄袭。🔄转载合作请后台联系授权,侵权必究。


01

读取数据

1 2 3 4 5 6 7 8 9 10 import pandas as pdimport numpy as np# 读取原始数据df = pd.read_csv("polar_chart_data.csv")# 为中心箱线图准备数据:按组提取所有 value# 结果 box_data 将是一个包含 4 个数组的列表group_names = sorted(df['group'].unique())box_data = [df[df['group'] == g]['value'].values for g in group_names]
02

极坐标计算

计算每个柱子的角度 θ 和宽度 w。为了让不同组之间有间隙,需要在总角度 2π 中预留一些“空位”(PAD)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 设定偏移量,让第一个柱子从正上方开始OFFSET = np.pi / 2PAD = 3 # 组与组之间的空隙大小# 计算总共需要的刻度数 = 样本总数 + 分组间隙angles_n = len(df) + PAD * len(group_names)all_angles = np.linspace(0, 2 * np.pi, num=angles_n, endpoint=False)width = (2 * np.pi) / angles_n# 计算每个样本实际对应的角度索引idxs = []current_pos = 0for g in group_names: group_size = len(df[df['group'] == g]) idxs += list(range(current_pos + PAD, current_pos + group_size + PAD)) current_pos += group_size + PAD
03

极坐标设置

创建一个极坐标系,并关键性地设置 y 轴范围。通过设置负值的下限(如 −100),可以在圆心创造出一个巨大的“空洞”来放置箱线图。
1 2 3 4 5 6 7 8 9 10 11 12 13 import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize=(10, 10), subplot_kw={"projection": "polar"})ax.set_theta_offset(OFFSET)# 关键:y轴从 -110 开始,0-100 是柱子高度# 这样中心半径为 110 的区域都是空白的ax.set_ylim(-110, 110) # 隐藏极坐标的所有坐标轴和背景线ax.set_frame_on(False)ax.set_xticks([])ax.set_yticks([])
04

绘图

在计算好的角度位置绘制柱子和箱线图。颜色需要根据 group 字段动态匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 colors = {"A": "#b0d1a6", "B": "#f5c5a0", "C": "#e7a39a", "D": "#b1a5c9"}# 绘制柱状图bars = ax.bar(all_angles[idxs], df['value'], width=width, color=[colors[g] for g in df['group']], alpha=0.6)# 在中心位置创建一个新的坐标系# [left, bottom, width, height] 范围是 0 到 1ax_box = ax.inset_axes([0.33, 0.33, 0.34, 0.34])# 在这个直角坐标系里画箱线图bp = ax_box.boxplot(box_data, patch_artist=True)# 隐藏这个嵌套坐标系的背景和边框,使其看起来是透明漂浮的ax_box.set_facecolor('none')ax_box.spines['top'].set_visible(False)ax_box.spines['right'].set_visible(False)
🌿 今日的分享就到这里啦~如果这些内容有为你带来帮助,欢迎轻点右下角的【👍赞】和【👀在看】,也欢迎分享给更多需要的人,感恩~
THE
END


数据和代码怎么获取?
点击关注后,后台回复关键词:
2026_map_013可直接获取完整的示例数据和代码
如有帮助,您的点赞、评论、转发是我持续创作的动力~
