如何基于Python DataFrame绘制城市-数值映射的径向条形/柱状图?
实现径向条形图(Radial Bar Chart)
需求说明
你有如下结构的DataFrame(名为df),需要将城市与对应数值映射为径向条形图:
| City | Counts |
|---|---|
| Leeds | 5 |
| Liverpool | 7 |
| Birmingham | 8 |
| Nottingham | 14 |
此前你已实现水平条形图,现在需要转换为极坐标径向条形图的效果。
实现步骤与代码
1. 导入依赖库
需要用到matplotlib.pyplot、numpy以及pandas(用于处理DataFrame):
import matplotlib.pyplot as plt import numpy as np import pandas as pd
2. 数据预处理与极坐标参数计算
- 提取DataFrame中的数值与城市名称
- 计算每个城市对应的极坐标角度(转换为弧度)
- 设置每个条形的角度宽度
# 提取数据 counts = df['Counts'].values cities = df['City'].values n_cities = len(cities) # 计算每个城市对应的角度(弧度),从0开始均匀分配 angles = np.linspace(0, 2 * np.pi, n_cities, endpoint=False) # 设置每个条形的角度宽度 bar_width = 2 * np.pi / n_cities
3. 创建极坐标绘图并绘制条形
使用projection='polar'创建极坐标子图,再用plt.bar绘制径向条形:
# 创建极坐标绘图对象 plt.figure(figsize=(8, 8)) ax = plt.subplot(projection='polar') # 定义颜色(可复用你之前的颜色列表) colors = ["red","green","blue","yellow","magenta","cyan"] # 绘制径向条形 bars = ax.bar(angles, counts, width=bar_width, color=colors[:n_cities]) # 自定义刻度:将角度刻度替换为城市名称 ax.set_xticks(angles) ax.set_xticklabels(cities) # 调整径向刻度范围,适配数据最大值 ax.set_ylim(0, counts.max() + 2) # 添加标题与径向标签 ax.set_title("各城市数值分布(径向条形图)", y=1.1) ax.set_ylabel("Counts", labelpad=30) plt.show()
关键说明
projection='polar'是开启极坐标绘图的核心参数,替代普通笛卡尔坐标系angles将城市均匀分配在极坐标圆周上,保证布局整齐- 通过
set_xticklabels替换默认角度刻度为城市名称,提升可读性 - 调整
ylim可以避免条形顶部超出绘图区域
内容的提问来源于stack exchange,提问作者Abhipriyo Banerjee
相关产品推荐
相关产品推荐

