You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Matplotlib在环形柱状图上绘制矩形

在Matplotlib环形柱状图(极坐标)上绘制矩形的方法

在极坐标下直接用常规2D的Rectangle类会因为坐标转换导致图形扭曲,要实现目标效果,需要通过定义极坐标范围的顶点,转换为笛卡尔坐标后绘制多边形,具体步骤如下:

1. 导入依赖库

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

2. 创建环形柱状图(极坐标基础图)

# 创建极坐标子图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}, figsize=(8,8))

# 示例环形柱状图数据
theta = np.linspace(0, 2*np.pi, 6, endpoint=False)  # 6个柱子的角度
radii = [5, 7, 6, 8, 9, 7]  # 每个柱子的高度(半径差)
width = 2*np.pi / 6  # 每个柱子的角度宽度

# 绘制环形柱状图(bottom设置内圈半径,形成环形)
ax.bar(theta, radii, width=width, bottom=3, edgecolor='white', facecolor='#6699cc')

# 调整极坐标显示参数
ax.set_ylim(0, 10)
ax.set_yticks([])  # 隐藏半径刻度
ax.set_xticks(theta)

3. 绘制极坐标下的矩形区域

要绘制的矩形对应极坐标中的角度范围和半径范围,我们可以通过生成该区域的四个顶点,转换为笛卡尔坐标后填充或绘制多边形:

# 定义目标矩形的极坐标范围
theta_start = 0  # 起始角度
theta_end = np.pi/3  # 结束角度
r_min = 4  # 内圈半径
r_max = 6  # 外圈半径

# 生成矩形四个顶点的极坐标(闭合)
polar_points = np.array([
    [theta_start, r_min],
    [theta_start, r_max],
    [theta_end, r_max],
    [theta_end, r_min],
    [theta_start, r_min]
])

# 转换为笛卡尔坐标
x = polar_points[:, 1] * np.cos(polar_points[:, 0])
y = polar_points[:, 1] * np.sin(polar_points[:, 0])

# 填充矩形区域(可调整颜色、透明度)
ax.fill(x, y, color='#ff4444', alpha=0.6)

# 可选:绘制矩形边框
ax.plot(x, y, color='#cc0000', linewidth=2)

关键说明

  • 极坐标下的“矩形”本质是环形扇形区域,由两条固定角度的径向线和两条固定半径的圆弧围成。
  • 常规Rectangle类基于笛卡尔坐标,在极坐标投影下会被自动转换,导致形状扭曲成弧形,因此必须通过顶点坐标转换的方式实现。

运行上述代码后,就能得到类似目标效果的图形。

内容的提问来源于stack exchange,提问作者csg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:18:15