小米的爸爸 發表於 2026-1-13 23:10:00

当条形图遇上极坐标:径向与圆形条形图的视觉革命

<p>想象一下,你正站在一个圆形广场的中心,周围均匀排列着12根高度不同的灯柱,这就是<strong>径向条形图</strong>带给我们的视觉体验。</p>
<p>在数据可视化领域,我们常常满足于传统的直角坐标系条形图,但当数据具有周期性或比较性时,<strong>径向条形图</strong>和<strong>圆形条形图</strong>为我们打开了新的可能性。</p>
<h1 id="1-设计原理">1. 设计原理</h1>
<p>这两种图表把传统的<strong>笛卡尔坐标系</strong>换成<strong>极坐标系</strong>:角度表示类别,半径或角度长度表示数值。</p>
<h2 id="11-径向条形图">1.1. 径向条形图</h2>
<p><strong>径向条形图</strong>本质上是将传统条形图的直角坐标系转换为极坐标系。</p>
<p>在极坐标系中,每个数据点不再由<code>(x, y)</code>定位,而是由<strong>(角度, 半径)</strong>确定,条形的高度(或长度)由半径值表示,而条形的排列则沿着圆周方向。</p>

<p><img src="https://img2024.cnblogs.com/blog/83005/202601/83005-20260113230907077-321355021.png" alt="" loading="lazy"></p>
<p><strong>设计灵感</strong>:如同钟表的指针或雷达的扫描线,径向条形图借鉴了自然界和人工制品中常见的圆形布局,利用了人类对角度和对称性的天然感知能力。</p>
<h2 id="12-圆形条形图">1.2. 圆形条形图</h2>
<p><strong>圆形条形图</strong>是径向条形图的一种特殊形式,它固定了起点和终点,使所有条形都在同一圆周上开始,只在半径方向上延伸。</p>
<p>这种设计解决了完全径向布局可能导致的<strong>数据比较困难</strong>问题,因为所有条形的基准线是一致的。</p>

<p><img src="https://img2024.cnblogs.com/blog/83005/202601/83005-20260113230907250-2040360098.png" alt="" loading="lazy"></p>
<p><strong>设计比喻</strong>:想象一组跳高运动员,他们都从同一高度起跳,只是跳跃的高度不同——圆形条形图就是这样公平的"竞技场"。</p>
<h1 id="2-应用示例">2. 应用示例</h1>
<p>下面通过示例来演示这两种图在实际场景中的应用。</p>
<h2 id="21-径向条形图">2.1. 径向条形图</h2>
<pre><code class="language-python"># --- 1. 构造测试数据 ---
# 假设我们想比较一年中每个月的平均降水量
月份 = [
    "一月",
    "二月",
    "三月",
    "四月",
    "五月",
    "六月",
    "七月",
    "八月",
    "九月",
    "十月",
    "十一月",
    "十二月",
]
# 生成模拟的降水量数据 (单位: mm)
np.random.seed(42)# 为了结果可复现
降水量 = np.random.uniform(30, 150, size=len(月份))# 随机生成30-150mm的数据

# --- 2. 创建图形 ---
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 7), facecolor="white")

# --- 2.1 绘制传统条形图 ---
# ... 省略 ...

# --- 2.2 绘制径向条形图 ---
# 计算每个条形的角度位置
# ... 省略 ...

# 使用极坐标子图
ax2 = plt.subplot(122, projection="polar")
# 关键:设置 'bottom' 参数为 inner_radius,这样条形就从 inner_radius 开始画,长度为 radii
bars = ax2.bar(
    theta,
    radii,
    width=0.4,
    bottom=inner_radius,
    color="lightcoral",
    edgecolor="darkred",
    alpha=0.7,
)

# 添加数值标签 (在条形内部,靠近外侧)
for angle, radius, month in zip(theta, radii, 月份):
    ax2.text(
      angle,
      inner_radius + radius / 2,
      f"{radius:.1f}",
      ha="center",
      va="center",
      fontsize=8,
      color="black",
    )

# 添加月份标记 (在条形外部)
# ... 省略 ...

# --- 3. 显示图形 ---
plt.tight_layout()
plt.show()
</code></pre>
<p>这段代码首先生成了模拟的月度降水量数据,然后在同一个图形窗口中创建了两个子图。</p>
<p>左侧是使用 <code>plt.bar</code> 创建的传统条形图,右侧是使用 <code>plt.subplot(..., projection='polar')</code> 和 <code>ax.bar</code> 创建的径向条形图。</p>
<p><strong>径向条形图</strong>利用了极坐标系,将类别(月份)分布在圆周上,将数值(降水量)映射到径向长度上。</p>

<p><img src="https://img2024.cnblogs.com/blog/83005/202601/83005-20260113230907232-60855079.png" alt="" loading="lazy"></p>
<p><strong>径向条形图</strong>是一种在极坐标系上绘制的图表,可以提供比传统条形图更具视觉吸引力的替代方案。它通过弧长来表示数值,并且可以有效地利用空间,尤其是在处理类别较多或需要强调周期性模式(例如按月份或季度分组的数据)时。</p>
<h2 id="22-圆形条形图">2.2. 圆形条形图</h2>
<pre><code class="language-python">from matplotlib import cm
from math import log10

labels = list("ABCDEFG")
data =
# ... 省略 ...

#create colors along a chosen colormap
colors =

#create figure, axis
fig, ax = plt.subplots()

#create rings of donut chart
for i in range(n):
    current_outer_radius = r - i * w
    innerring, _ = ax.pie(, data],
                        radius = current_outer_radius,
                        startangle = 90,
                        colors = ["white", colors])

    # 添加标签
    # ... 省略 ...

plt.show()
</code></pre>

<p><img src="https://img2024.cnblogs.com/blog/83005/202601/83005-20260113230907034-1742470964.png" alt="" loading="lazy"></p>
<p><strong>圆形条形图</strong>从同一基准线开始,避免了<strong>径向条形图</strong>中不同角度起始点不同的问题,更加便于比较。</p>
<h1 id="3-总结">3. 总结</h1>
<p><strong>径向条形图</strong>和<strong>圆形条形图</strong>代表了数据可视化从纯功能向功能美学平衡的演进。</p>
<p>它们不是要完全取代传统条形图,而是为我们提供了更多视觉叙事的工具。</p>
<p>就像一位熟练的厨师拥有多种刀具一样,优秀的数据分析师也应该掌握多种可视化技术,根据数据特性和沟通目标选择最合适的"刀具"。</p>
<p>当你的数据讲述着周期性的故事,或需要在有限空间内进行多维度比较时,不妨尝试这些圆形可视化方法。它们不仅能更有效地传达信息,还能为你的报告或仪表板增添独特的视觉魅力。</p>
<p>最好的可视化不是最复杂的,而是最能清晰传达数据故事的。</p>
<p><strong>径向</strong>和<strong>圆形条形图</strong>正是这样一种工具:在传统与现代之间,在功能与美学之间,找到了优雅的平衡点。</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/19479454
頁: [1]
查看完整版本: 当条形图遇上极坐标:径向与圆形条形图的视觉革命