如何为Matplotlib的hist2D二维直方图设置圆形外框?
Matplotlib笛卡尔坐标系下将二维直方图外框修改为圆形的实现方法
核心思路是对二维直方图的绘制结果添加圆形裁剪路径,无需修改原始分箱逻辑,也不用切换极坐标系,具体实现步骤如下:
- 先导入依赖的补丁类:
import matplotlib.pyplot as plt import matplotlib.patches as patches
- 保留原有绘图逻辑不变,额外添加圆形裁剪、隐藏坐标轴的代码即可:
# 假设x、y、m为你的原始数据 fig, ax = plt.subplots() # 原有绘制二维直方图的代码完全不需要修改 hist_res = ax.hist2d(x, y, bins=200, weights=m) # 创建和数据范围匹配的圆形裁剪补丁 # 若你的数据圆心不是(0,0),可修改第一个参数为实际圆心坐标 circle_patch = patches.Circle((0, 0), radius=3, transform=ax.transData) # 给直方图对象设置裁剪路径 hist_res[3].set_clip_path(circle_patch) # 隐藏所有坐标轴元素 ax.axis('off') # 固定坐标轴范围贴合圆形边界 ax.set_xlim(-3, 3) ax.set_ylim(-3, 3) # 保持纵横比为1,避免圆形被拉伸变形 ax.set_aspect('equal') plt.show()
- 补充说明:如果你的数据圆形范围不是中心在原点、半径3,只需要对应修改Circle的圆心坐标、radius参数以及set_xlim、set_ylim的范围即可,其余逻辑无需调整。
内容的提问来源于stack exchange,提问作者Harry Chittenden
相关产品推荐
相关产品推荐

