Matplotlib如何调整x轴刻度间距及实现柱状图并排无空隙
Matplotlib柱状图问题解决代码与说明
完整可运行修改代码
import matplotlib.pyplot as plt years = [2010,2015,2020,2021] photovoltaics = [3549,4351,5000,7200] hydropower = [1190,2930,3200, 4500] # 生成等间距索引作为x轴基准坐标 x = range(len(years)) # 设置单组柱子宽度,两组总宽度为1,刚好填满刻度间隔,无空隙 width = 0.5 # 可通过调整figsize的第一个参数放大x轴整体刻度间距,数值越大间距越大 fig, ax = plt.subplots(figsize=(8, 5)) # 第一组柱子左偏移半个宽度 ax.bar([i - width/2 for i in x], photovoltaics, width=width) # 第二组柱子右偏移半个宽度 ax.bar([i + width/2 for i in x], hydropower, width=width) # 设置x轴刻度为对应年份 ax.set_xticks(x) ax.set_xticklabels(years) fig.tight_layout() plt.show()
问题1:调整x轴刻度间距的方法
- 原代码直接用年份数值作为x轴坐标,因为年份间隔不相等(2020到2021间隔1,其余间隔5),会出现刻度疏密不均的问题。改用等长的序列索引作为x轴实际坐标,再把刻度标签替换为年份,即可实现均匀的刻度间距。
- 如需调整整体刻度的疏密程度,修改
plt.subplots中figsize参数的第一个值(画布宽度)即可,数值越大x轴刻度间距越大。
问题2:两组柱状图并排且消除空隙的方法
- 原代码添加了
bottom参数,实际绘制的是堆叠柱状图,无法实现并排效果。要实现并排,需要对两组柱子的x坐标分别做反向偏移,让两组柱子分别位于刻度线的左右两侧。 - 两个相邻索引的默认间隔为1,将单组柱子宽度设置为0.5,两组总宽度刚好为1,拼接后完全填满刻度间隔,不会出现白色空隙。如果需要保留少量空隙,适当调小
width参数即可。
内容的提问来源于stack exchange,提问作者user17066714
相关产品推荐
相关产品推荐

