如何调整Python绘图标注箭头,使数值靠近边缘而非标记旁?
解决温度站点标注重叠的方案
要把数值标注移到图的边缘并通过箭头连接到对应站点,你可以调整文本位置到统一的边缘区域,让箭头动态指向该位置,避免重叠。以下是修改后的代码:
# Labels. sc = plt.scatter(lon, lat, c=temp, s=20, cmap="RdYlGn_r") # 设置文本标注的边缘基准位置(根据你的地图范围调整偏移量) txt_base_x = lon.max() + 0.2 prev_txt_y = None y_adjust = 0.0 for label, xpt, ypt in zip(temp, lon, lat): # 处理y轴方向的文本重叠,若相邻站点y值过近则微调 if prev_txt_y is not None and abs(ypt - prev_txt_y) < 0.1: y_adjust += 0.05 else: y_adjust = 0.0 txt_y = ypt + y_adjust # 在边缘绘制温度数值 plt.text(txt_base_x, txt_y, label, ha='left', va='center', color='black') # 计算箭头的偏移量(让箭头头部离文本有一点距离) arrow_dx = txt_base_x - xpt - 0.05 arrow_dy = txt_y - ypt # 绘制从站点到文本的箭头 plt.arrow( xpt, ypt, arrow_dx, arrow_dy, head_width=0.02, head_length=0.02, fc='black', ec='black', length_includes_head=True # 确保箭头长度包含箭头头部 ) prev_txt_y = txt_y # add colorbar cbar = plt.colorbar(sc) # pic layout adjust plt.tight_layout() plt.show()
关键调整说明:
- 统一边缘文本位置:把所有温度数值放在经度最大值右侧的固定区域,避免在站点附近拥挤。
- 动态箭头计算:根据站点和文本的实际位置计算箭头的偏移量,不再用固定的
0.15偏移,确保箭头准确连接。 - y轴重叠处理:通过微调文本的y坐标,避免边缘的温度数值互相重叠。
内容的提问来源于stack exchange,提问作者Saulo Carvalho
相关产品推荐
相关产品推荐

