# 例子:某城市四季平均最高气温为23, 34, 26, 17,平均湿度60,75,55,48,请按照如下要求绘制共享坐标轴图像。
# (1)温度显示为柱状图(左侧y轴),适度显示为折线图(右侧y轴)
# (2)x轴为季节,刻度标签字号12,倾斜20度。
# (3)左侧y轴标签“平均温度“设为绿色。
# (4)右侧y轴代表平均湿度,下限设为40。
# (5)柱状图图例显示左上,折线图图例显示右上。

import matplotlib.pyplot as plt

x = ['春','夏','秋','冬']
y1 = [23, 34, 26, 17]
y2= [60,75,55,48]

fig, ax = plt.subplots(figsize=(6, 3))

#这个是能够实现双y轴的重点,共享x轴;还有一种是双x轴的图表换成ax.twiny()
ax2 = ax.twinx()

#柱状图(左侧y轴)
# bar()的函数签名为matplotlib.pyplot.bar(x, height, width=0.8, alpha,label)

#alpha:柱状图形的透明度 label:图例
bq = ax.bar(x,y1,width=0.2,color='pink',alpha=0.5,label='平均温度/℃')
ax.bar_label(bq, label_type='edge',color='yellow')

#bar_label()
# matplotlib.pyplot.bar_label(container, labels=None, *, fmt='%g', label_type='edge', padding=0,**kwargs)

# container:柱子的容器对象 labels : 标签文本列表 fmt:标签的格式字符串
#label_type :标签类型 取值范围为 {'edge', 'center'} edge标签位于柱子的端点

# 折线图(右侧y轴)
ax2.plot(x, y2,marker='o',c='skyblue',alpha=0.5,linewidth=2,markersize=4,label = '平均湿度')
for a, b in zip(x, y2):
    plt.text(a, b, b, fontsize=10) # 设置折线图数据标签 center标签位于柱子的中部

#显示标签
ax.legend(loc=2)
ax2.legend(loc=1)

#设置x轴标签
ax.set_xlabel('季节')
ax.tick_params(labelsize=12) #刻度标签字号12

for tick in ax.get_xticklabels():
tick.set_rotation(20) #倾斜20度

#设置y轴标签
ax.set_ylabel('平均温度/℃',color='g') #左
ax2.set_ylabel('平均湿度') #右

#设置y轴右边的下限与上限
ax2.set_ylim(40, 80)

plt.show()

 

Logo

鸿蒙生态一站式服务平台。

更多推荐