如何使用Matplotlib在图片上绘制线条并自定义坐标轴数值
你可以通过matplotlib提供的刻度设置方法自定义x、y轴的显示数值,具体实现方式如下:
核心实现逻辑
使用plt.xticks()和plt.yticks()两个方法即可完成刻度自定义:
- 第一个参数
ticks传入刻度对应的图片实际像素位置,和你绘制线条时使用的坐标体系保持一致 - 第二个参数
labels传入你想要在坐标轴上显示的自定义数值,长度需要和ticks列表匹配
如果仅需要调整坐标轴的取值范围,不需要修改刻度标签,直接使用plt.xlim()、plt.ylim()设置范围即可。
修改后的完整代码
from matplotlib import image from matplotlib import pyplot as plt # 读取工作目录下存储的图片 data = image.imread('Darwin_Maps.png') # 从(200, 300)到(500, 100)绘制一条线条 x = [200, 500] y = [300, 100] plt.plot(x, y, color="white", linewidth=3) plt.imshow(data) # 自定义x轴刻度:像素位置0~700对应显示数值0~70,间隔为10 plt.xticks(ticks=[i*100 for i in range(8)], labels=[i*10 for i in range(8)]) # 自定义y轴刻度:像素位置0~500对应显示数值0~100,间隔为20 plt.yticks(ticks=[i*100 for i in range(6)], labels=[i*20 for i in range(6)]) # 若仅需调整坐标轴取值范围,不需要修改刻度标签,可取消注释以下两行 # plt.xlim(0, 700) # plt.ylim(500, 0) # imshow默认y轴原点在图片顶部,因此范围要反向设置保持和原图方向一致 plt.show()
注意事项
matplotlib的imshow方法默认将y轴原点设置在图片顶部,和常规绘图的坐标系方向相反,如果你需要调整为y轴从下到上递增,可以在imshow时传入参数origin='lower',同时调整绘制线条的y坐标即可。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

