Python折线图如何在标记点上方显示数值标签?
在折线图标记点上方显示数值的解决方案
要在每个标记点上方显示对应的数据值,你可以借助matplotlib的文本标注功能,结合pandas绘图返回的Axes对象来实现。以下是修改后的完整代码:
import pandas as pd import matplotlib.pyplot as plt d = {'Year': ['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019'], 'Total': [1133.34262,1139.36454,1151.42072,1134.42854,1127.49346,1121.54558,1118.75674,1112.13016,1111.08126,1112.37696], 'Metric1':[444.4251,453.495,452.59418,454.63028,456.53064,456.17278,456.5183,455.35834,456.49362,456.4566], 'Metric2':[116.78576,116.13174,112.70122,112.49144,111.62764,108.74008,106.40782,105.61806,106.0623,104.74192], 'Metric3':[346.95144,346.24806,358.21786,350.06112,343.00264,338.49854,333.78466,329.88522,329.37928,331.36602], 'Metric4':[224.82246,223.58846,228.0432,217.09762,216.1351,217.83802,221.71278,221.10812,219.05968,219.38052]} df = pd.DataFrame(data=d) # 绘制折线图并获取Axes对象 ax = df.plot( x="Year", y=['Metric1','Metric2','Metric3','Metric4'], kind="line", figsize=(12,10), marker='o', linewidth=2 ) # 遍历每条折线,为每个标记点添加数值标注 for line in ax.get_lines(): # 获取折线的x、y坐标数据 x_data = line.get_xdata() y_data = line.get_ydata() # 逐个添加文本标注 for x, y in zip(x_data, y_data): # 在点的上方偏移一点位置显示数值,保留两位小数 ax.text(x, y + 1.5, f'{y:.2f}', ha='center', fontsize=9) plt.show()
关键说明:
- 先通过
ax = df.plot(...)获取绘图的Axes对象,所有标注操作基于该对象展开 ax.get_lines()可以获取图表中所有的折线对象- 遍历每条折线的x、y数据,用
ax.text()添加文本:x, y + 1.5:把文本放在标记点上方1.5个单位处,避免和标记点重叠f'{y:.2f}':将数值格式化为两位小数,让标注更整洁ha='center':设置文本水平居中对齐
你可以根据需求调整:
- 修改
y + 1.5中的偏移量,优化文本位置 - 调整
fontsize改变标注文字大小 - 修改格式化字符串
{y:.2f}控制小数位数,比如{y:.1f}保留一位小数,{y:.0f}显示整数
内容的提问来源于stack exchange,提问作者tmmbt
相关产品推荐
相关产品推荐

