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

想象一下,你正站在一个圆形广场的中心,周围均匀排列着12根高度不同的灯柱,这就是径向条形图带给我们的视觉体验。

在数据可视化领域,我们常常满足于传统的直角坐标系条形图,但当数据具有周期性或比较性时,径向条形图圆形条形图为我们打开了新的可能性。

1. 设计原理

这两种图表把传统的笛卡尔坐标系 换成极坐标系:角度表示类别,半径或角度长度表示数值。

1.1. 径向条形图

径向条形图本质上是将传统条形图的直角坐标系转换为极坐标系。

在极坐标系中,每个数据点不再由(x, y)定位,而是由**(角度, 半径)**确定,条形的高度(或长度)由半径值表示,而条形的排列则沿着圆周方向。

设计灵感:如同钟表的指针或雷达的扫描线,径向条形图借鉴了自然界和人工制品中常见的圆形布局,利用了人类对角度和对称性的天然感知能力。

1.2. 圆形条形图

圆形条形图是径向条形图的一种特殊形式,它固定了起点和终点,使所有条形都在同一圆周上开始,只在半径方向上延伸。

这种设计解决了完全径向布局可能导致的数据比较困难问题,因为所有条形的基准线是一致的。

设计比喻:想象一组跳高运动员,他们都从同一高度起跳,只是跳跃的高度不同------圆形条形图就是这样公平的"竞技场"。

2. 应用示例

下面通过示例来演示这两种图在实际场景中的应用。

2.1. 径向条形图

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()

这段代码首先生成了模拟的月度降水量数据,然后在同一个图形窗口中创建了两个子图。

左侧是使用 plt.bar 创建的传统条形图,右侧是使用 plt.subplot(..., projection='polar')ax.bar 创建的径向条形图。

径向条形图利用了极坐标系,将类别(月份)分布在圆周上,将数值(降水量)映射到径向长度上。

径向条形图是一种在极坐标系上绘制的图表,可以提供比传统条形图更具视觉吸引力的替代方案。它通过弧长来表示数值,并且可以有效地利用空间,尤其是在处理类别较多或需要强调周期性模式(例如按月份或季度分组的数据)时。

2.2. 圆形条形图

python 复制代码
from matplotlib import cm
from math import log10

labels = list("ABCDEFG")
data = [21, 57, 88, 14, 76, 91, 26]
# ... 省略 ...

#create colors along a chosen colormap
colors = [cm.terrain(i / n) for i in range(n)]

#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([m - data[i], data[i]], 
                          radius = current_outer_radius, 
                          startangle = 90, 
                          colors = ["white", colors[i]])

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

plt.show()

圆形条形图 从同一基准线开始,避免了径向条形图中不同角度起始点不同的问题,更加便于比较。

3. 总结

径向条形图圆形条形图代表了数据可视化从纯功能向功能美学平衡的演进。

它们不是要完全取代传统条形图,而是为我们提供了更多视觉叙事的工具。

就像一位熟练的厨师拥有多种刀具一样,优秀的数据分析师也应该掌握多种可视化技术,根据数据特性和沟通目标选择最合适的"刀具"。

当你的数据讲述着周期性的故事,或需要在有限空间内进行多维度比较时,不妨尝试这些圆形可视化方法。它们不仅能更有效地传达信息,还能为你的报告或仪表板增添独特的视觉魅力。

最好的可视化不是最复杂的,而是最能清晰传达数据故事的。

径向圆形条形图正是这样一种工具:在传统与现代之间,在功能与美学之间,找到了优雅的平衡点。

相关推荐
databook2 小时前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
电商API_180079052477 小时前
批量获取电商商品数据的主流技术方法全解析
大数据·数据库·人工智能·数据分析·网络爬虫
tracy_an12 小时前
2026/1/13 类 参数引用问题
数据分析
数据大魔方14 小时前
【期货量化进阶】期货Tick数据分析与应用:高频数据入门(TqSdk完整教程)
python·算法·数据挖掘·数据分析·github·程序员创富·期货程序化
YangYang9YangYan14 小时前
2026中专财务专业学数据分析指南
数据挖掘·数据分析
叫我:松哥15 小时前
基于Flask+ECharts+Bootstrap构建的微博智能数据分析大屏
人工智能·python·信息可视化·数据分析·flask·bootstrap·echarts
青春不败 177-3266-052015 小时前
AI支持下的临床医学日常工作、论文撰写、数据分析与可视化、机器学习建模中的实践应用
人工智能·数据挖掘·数据分析·医学
小湘西16 小时前
数仓分层架构详解:ODS、DWD、DWS
数据仓库·数据分析
Watermelo61716 小时前
探究TOON的价值边界:比JSON更优的大模型友好数据格式?
数据结构·人工智能·语言模型·自然语言处理·数据挖掘·数据分析·json