Python Matplotlib双y轴组合图折线数据点上方标注数值的实现问题
双Y轴组合图折线数据点标注解决方案
你之前的标注逻辑针对的是柱状图的patches对象,折线图需要直接遍历数据点坐标添加文本标注,具体修改方法如下:
修改说明
只需要在原有代码的plt.show()之前,添加一段遍历折线数据的标注代码即可,由于折线绘制在次Y轴ax2上,因此直接使用ax2.text()方法标注即可。
完整可运行代码
import matplotlib.pyplot as plt import pandas as pd width=.7 t=pd.DataFrame({'bars':[3.4,3.1,5.1,5.1,3.8,4.2,5.2,4.0,3.6],'lines':[2.4,2.2,2.4,2.1,2.0,2.1,1.9,1.8,1.9]}) ax1 = t['bars'].plot(kind='bar',width=width,color='lightgrey') ax2 = t['lines'].plot(secondary_y=True, color='red', marker='o') # marker参数用于显示折线数据点,不需要可以删除 ax1.plot(label='bars') ax2.plot(label='lines') lines,labels=ax1.get_legend_handles_labels() lines2,labels2=ax2.get_legend_handles_labels() ax2.legend(lines+lines2,labels+labels2) ax1.yaxis.grid(linestyle='dashed') ax1.set_axisbelow(True) ax1.set_xticklabels(('1','2','3','4','5','6','7','8','9')) ax1.set_ylim(0,6) ax1.set_ylabel('title1') ax2.set_ylim(0, 2.5) ax2.set_ylabel('title2') # 新增:标注折线数据点 for idx, val in enumerate(t['lines']): # idx对应x轴分类的位置,val是折线的y值,+0.05是向上偏移避免和折线重叠 ax2.text(idx, val + 0.05, f'{val}', ha='center', va='bottom', color='red') plt.show()
参数说明
ha='center':保证文本水平居中对齐数据点va='bottom':文本底部对齐坐标点,配合y值偏移让文本刚好显示在点上方- 偏移量
0.05可以根据显示需求调整,要增大和折线的距离调大该值即可
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

