如何用Matplotlib绘制指定样式的百分比柱状图(附数据)
用Matplotlib实现指定柱状图
首先修正数据中的错误:原countries列表里的"DR"和"Kongo"是两个独立元素,会导致与resources、percentages长度不匹配,需合并为"DR Kongo"。
以下是完整实现代码:
import matplotlib.pyplot as plt # 修正后的数据 countries = ["Bolivien","Argentinien","US","Chile","Australien","China","Deutschland","DR Kongo","Kanada","Mexiko","Tschechien","Serbien","Weitere"] resources = [21,20,12,11,7.9,6.8,3.2,3,2.9,1.7,1.3,1.2,6] percentages = [21.43,20.41,12.24,11.22,8.06,6.94,3.27,3.06,2.96,1.73,1.33,1.22,6.12] # 创建画布和坐标轴 fig, ax = plt.subplots(figsize=(10, 6)) # 绘制柱状图,高度对应百分比 bars = ax.bar(range(len(countries)), percentages) # 设置x轴刻度为国家名称,旋转45度避免重叠 ax.set_xticks(range(len(countries))) ax.set_xticklabels(countries, rotation=45, ha='right') # 在每个柱子上方标注resources数值 for bar, res in zip(bars, resources): height = bar.get_height() ax.text(bar.get_x() + bar.get_width()/2., height, f'{res}', ha='center', va='bottom') # 设置y轴标签和标题 ax.set_ylabel('百分比 (%)') ax.set_title('各国资源占比') # 调整布局,防止标签被截断 plt.tight_layout() # 显示图表 plt.show()
关键步骤说明:
- 柱状图绘制:用
plt.bar()生成柱子,x轴用索引值避免字符串直接作为x轴的问题,后续再替换为国家名称。 - 刻度调整:通过
set_xticks()和set_xticklabels()设置x轴刻度,旋转45度并右对齐,避免长名称重叠。 - 数值标注:遍历每个柱子,获取其位置和高度,用
ax.text()在柱子顶部居中标注对应的resources数值。 - 布局优化:
tight_layout()自动调整图表元素位置,防止x轴标签被截断。
内容的提问来源于stack exchange,提问作者simon.moebs
相关产品推荐
相关产品推荐

