同位置多柱状图主要是通过width重新获得x的坐标,第一个位置是ps,第二个就是ps+width,第三个就是pos+width*width进行绘制.
通过fig的add_subplot()函数进行子图的选取
# 国家
countries = ['China', 'Japan', 'American', 'England', 'Germany']
# 金牌个数
gold_medal = [16, 12, 9, 8, 8]
# 银牌个数
silver_medal = [8, 10, 4, 10, 5]
# 铜牌个数
bronze_medal = [13, 5, 2, 7, 5]
# 设置画布
fig = plt.figure(figsize=(6,5),dpi=150)
ax1=fig.add_subplot(234)
ax1.set_title('gold')
ax1.bar(countries,gold_medal,color='gold')
#旋转x标签
ax1.tick_params(axis='x',rotation=45)
# 一个画布分为2行3列,定位第二个
ax2 = fig.add_subplot(235)
ax2.set_title("sliver")
# 旋转x标签
ax2.tick_params(axis="x",rotation=45)
# 银牌榜
ax2.bar(countries, silver_medal, color="silver")
# 一个画布分为2行3列,定位第二个
ax3 = fig.add_subplot(236)
ax3.set_title("bronze")
# 旋转x标签
ax3.tick_params(axis="x",rotation=45)
# 铜牌榜
ax3.bar(countries, bronze_medal, color="#A0522D")
# ================绘制总图:绘制2行一列,移动到第一行======
ax = fig.add_subplot(211)
# 1.将x轴转换为数值
x_int = np.arange(len(countries))
# 2.设置图形的宽度
width = 0.2
# 确定x起始位置
gold_x = x_int # 金牌起始位置
silver_x = x_int+width # 银牌的起始位置
bronze_x = x_int + 2*width # 铜牌的起始位置
# 分别绘制图形
ax.bar(gold_x, gold_medal, width=width,color="gold", label="gold") # 金牌图形
ax.bar(silver_x, silver_medal, width=width, color="silver",label="sliver") # 银牌图形
ax.bar(bronze_x, bronze_medal, width=width, color="saddlebrown",label="bronze") # 铜牌图形
# 将x轴的坐标变回来
# plt.xticks(x_int,labels=countries)
# 移动x标记的位置,再替换内容
ax.set_xticks(x_int + width)
ax.set_xticklabels(countries )
#-----------显示高度文本----------------
# 金牌 # 银牌 # 铜牌
for i in range(len(countries)):
# 金牌
ax.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
# 银牌
ax.text(silver_x[i],silver_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
# 铜牌
ax.text(bronze_x[i],bronze_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
# 显示图例
ax.legend(fontsize=6 )
plt.tight_layout()
plt.show()