matplotlib折线图仅标注最大最小值点文本避免重叠的实现问题
解决方案
核心逻辑:先定位到SYS列的最大值、最小值对应的数据点,仅对这两个点位添加文本标注即可,同时注意画布参数配置要放在绘图操作前才会生效。
修改后完整代码
import matplotlib.pyplot as plt import pandas as pd # 若已提前导入可省略该行 # 提前配置画布尺寸,放在绘图前才会生效 plt.rcParams['figure.figsize'] = (15, 10) x = df['Measurement Date'] y = df['SYS'] # 绘制折线图 plt.plot(x, y) # 定位最大值、最小值对应的行 max_row = df[df['SYS'] == df['SYS'].max()].iloc[0] min_row = df[df['SYS'] == df['SYS'].min()].iloc[0] # 给最大值加标注,y+2是向上偏移避免和点重叠,参数可自行调整 plt.text(x=max_row['Measurement Date'], y=max_row['SYS'] + 2, s='{:.0f}'.format(max_row['SYS']), color='red', fontweight='bold') # 给最小值加标注,y-2是向下偏移 plt.text(x=min_row['Measurement Date'], y=min_row['SYS'] - 2, s='{:.0f}'.format(min_row['SYS']), color='green', fontweight='bold') plt.show()
可选优化说明
- 如果存在多个数值相同的最大值/最小值,可去掉
iloc[0],循环遍历所有符合条件的行添加标注 - 文本的偏移量、颜色、字体大小可根据实际显示效果自行调整
内容的提问来源于stack exchange,提问作者Ama
相关产品推荐
相关产品推荐

