如何调整Matplotlib水平条形图(barh)宽度,优化双向条形图布局?
修改后的Python代码(适配韩国2021年人口双向水平条形图)
import matplotlib.pyplot as plt # 替换为你的真实人口数据 age_groups = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80+'] male_pop = [4500000, 4800000, 5200000, 5100000, 5500000, 5000000, 3800000, 2200000, 1000000] female_pop = [4200000, 4500000, 4900000, 4800000, 5300000, 5100000, 4100000, 2800000, 1500000] # 加宽画布宽度,为右侧女性标注预留空间 fig, ax = plt.subplots(figsize=(12, 6)) # 绘制左右两侧条形,控制条形垂直高度避免拥挤 ax.barh(age_groups, male_pop, height=0.7, color='#1f77b4', label='男性') ax.barh(age_groups, [-x for x in female_pop], height=0.7, color='#ff7f0e', label='女性') # 扩展X轴范围,防止标注贴近边缘 ax.set_xlim(-6000000, 6000000) # 男性标注:条形右侧加小偏移 for i, v in enumerate(male_pop): ax.text(v + 100000, i, f'{v:,}', va='center') # 女性标注:增加向左偏移量,拉开与Y轴文本的距离 for i, v in enumerate(female_pop): ax.text(-v - 300000, i, f'{v:,}', va='center') # 基础美化 ax.set_title('韩国2021年各年龄段人口分布', fontsize=14) ax.legend() ax.axvline(0, color='black', linewidth=0.5) plt.tight_layout() plt.show()
核心调整点
- 画布尺寸:通过
figsize=(12,6)加宽整体宽度,解决右侧标注空间不足的问题 - 条形高度:
height=0.7控制条形垂直间距,避免Y轴文本与条形过度拥挤 - 标注偏移:女性标注的
text函数中额外增加向左偏移,彻底拉开与Y轴文本的距离 - X轴范围:扩展左右边界,防止标注超出画布或贴近边缘
内容的提问来源于stack exchange,提问作者Seoyoung Park
相关产品推荐
相关产品推荐

