不使用Numpy、Pandas时Matplotlib柱状图柱子分隔问题求助
问题原因
你的代码核心错误是Python原生列表不支持直接与数值进行批量算术运算,eixo_X_ano - largura/2属于非法操作,无法得到每个年份减去宽度偏移后的坐标,因此无法正确排布两组柱子的位置。
修正后代码(无需引入Numpy/Pandas)
import matplotlib.pyplot as plt eixo_X_ano = [78,82,86,90,94] eixo_Y_AMM = [1.8,1.75,1.9,1.77,1.74] eixo_Y_AMF = [1.71,1.69,1.8,1.73,1.82] plt.title("获得奖牌运动员的平均身高") plt.xlabel("年份") plt.ylabel("平均身高") largura = 2 # 用列表推导式计算两组柱子的X轴偏移位置 x_pos_masculino = [x - largura/2 for x in eixo_X_ano] x_pos_feminino = [x + largura/2 for x in eixo_X_ano] plt.ylim(1,2.50) plt.bar(x_pos_masculino, eixo_Y_AMM, largura, label = "男子组", color = "teal") plt.bar(x_pos_feminino, eixo_Y_AMF, largura, label = "女子组", color = "r") plt.legend() plt.xticks(eixo_X_ano) plt.show()
修改说明
- 采用Python原生列表推导式逐元素计算两组柱状图的X轴偏移位置,完全不需要引入Numpy、Pandas库,符合使用限制要求
- 设定的柱子宽度2适配X轴年份间隔4的设置,两组柱子各自占2单位宽度,同一年份的两组柱子不会重叠,相邻年份的柱子也不会互相挤压。
内容的提问来源于stack exchange,提问作者FELIP ANDRADE RALIN
相关产品推荐
相关产品推荐

