想象一下,你正站在一个圆形广场的中心,周围均匀排列着12根高度不同的灯柱,这就是径向条形图带给我们的视觉体验。
在数据可视化领域,我们常常满足于传统的直角坐标系条形图,但当数据具有周期性或比较性时,径向条形图和圆形条形图为我们打开了新的可能性。
1. 设计原理
这两种图表把传统的笛卡尔坐标系换成极坐标系:角度表示类别,半径或角度长度表示数值。
1.1. 径向条形图
径向条形图本质上是将传统条形图的直角坐标系转换为极坐标系。
在极坐标系中,每个数据点不再由(x, y)定位,而是由(角度, 半径)确定,条形的高度(或长度)由半径值表示,而条形的排列则沿着圆周方向。
设计灵感:如同钟表的指针或雷达的扫描线,径向条形图借鉴了自然界和人工制品中常见的圆形布局,利用了人类对角度和对称性的天然感知能力。
1.2. 圆形条形图
圆形条形图是径向条形图的一种特殊形式,它固定了起点和终点,使所有条形都在同一圆周上开始,只在半径方向上延伸。
这种设计解决了完全径向布局可能导致的数据比较困难问题,因为所有条形的基准线是一致的。
设计比喻:想象一组跳高运动员,他们都从同一高度起跳,只是跳跃的高度不同——圆形条形图就是这样公平的"竞技场"。
2. 应用示例
下面通过示例来演示这两种图在实际场景中的应用。
2.1. 径向条形图
- # --- 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. 圆形条形图
- 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. 总结
径向条形图和圆形条形图代表了数据可视化从纯功能向功能美学平衡的演进。
它们不是要完全取代传统条形图,而是为我们提供了更多视觉叙事的工具。
就像一位熟练的厨师拥有多种刀具一样,优秀的数据分析师也应该掌握多种可视化技术,根据数据特性和沟通目标选择最合适的"刀具"。
当你的数据讲述着周期性的故事,或需要在有限空间内进行多维度比较时,不妨尝试这些圆形可视化方法。它们不仅能更有效地传达信息,还能为你的报告或仪表板增添独特的视觉魅力。
最好的可视化不是最复杂的,而是最能清晰传达数据故事的。
径向和圆形条形图正是这样一种工具:在传统与现代之间,在功能与美学之间,找到了优雅的平衡点。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |