如何使用fig, ax = plt.subplots()同一行绘制5个纽约行政区横向条形图
实现方案
核心逻辑是创建子图时指定1行5列的布局,再遍历每个子图绘制对应行政区的横向条形图即可,可直接运行的示例代码如下:
import matplotlib.pyplot as plt # 纽约5个行政区 boroughs = ["布朗克斯", "布鲁克林", "曼哈顿", "皇后区", "斯塔滕岛"] # 演示统计指标,可替换为你自己的业务指标 metrics = ["平均房价(万美元)", "人均月收入(千美元)", "失业率(%)"] # 各行政区对应指标数据,可替换为你的真实数据 borough_data = { "布朗克斯": [58, 3.2, 8.1], "布鲁克林": [92, 4.5, 5.7], "曼哈顿": [210, 7.8, 4.2], "皇后区": [76, 4.1, 5.1], "斯塔滕岛": [65, 3.8, 4.8] } # 生成1行5列的子图,设置画布尺寸避免内容拥挤 fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(20, 5)) # 遍历行政区和对应子图,逐个绘制横向条形图 for idx, (borough, ax) in enumerate(zip(boroughs, axes)): ax.barh(metrics, borough_data[borough]) ax.set_title(borough) # 仅保留第一个子图的y轴标签,避免重复显示浪费空间 if idx != 0: ax.set_yticks([]) # 自动调整子图间距,避免标题、标签重叠 plt.tight_layout() plt.show()
- 如果需要调整子图横向间距,可以给
tight_layout()传入w_pad参数设置,比如plt.tight_layout(w_pad=2) - 横向条形图的样式自定义规则和普通条形图一致,可按需修改颜色、条形高度、边框等属性
- 需要给条形添加数值标注的话,可在绘制
barh后遍历数值,调用ax.text()方法添加对应文本即可
内容的提问来源于stack exchange,提问作者giovanni sergi
相关产品推荐
相关产品推荐

