Python中plt.imshow()自定义Y轴指定位置刻度标记问题
在Matplotlib拼接图的水平线旁添加刻度标签
我来帮你搞定这个给水平线加自定义刻度的需求!根据你的代码,你已经成功画出了水平线,现在只需要给这些线配上对应的刻度值就行,这里有两种实用的方法:
方法1:直接在水平线旁添加文本标签
这种方法简单直接,适合快速给每条线标注。你只需要在循环里画完axhline之后,用plt.text()在对应位置添加文本即可。需要注意文本的x位置,要选在不会遮挡图像的地方,比如图像范围的外侧:
import matplotlib.pyplot as plt # 假设你的mu_pix对应的刻度值是这个列表,替换成你实际的数值即可 tick_values = [0.1, 0.2, 0.3, 0.4] # 长度要和mu_pix保持一致 fig = plt.figure(figsize=(2,20)) plt.imshow(cube1_img_rot) plt.imshow(cube2_img_rot, extent=[-19,1928,-24537, -22591]) plt.imshow(cube3_img_rot, extent=[-19,1928,-9352, -7476]) # 获取x轴左边界,把文本放在图像左侧外侧,避免遮挡内容 x_pos = plt.xlim()[0] - 200 # 可以根据图像宽度调整这个偏移量 for i in range(len(mu_pix)): plt.axhline(mu_pix[i], color='red') # 给水平线加颜色方便区分,可选 # 添加刻度文本,va='center'让文本和水平线垂直居中,ha='right'让文本贴近线 plt.text(x_pos, mu_pix[i], f'{tick_values[i]}', va='center', ha='right', fontsize=10) plt.savefig('foo.pdf', bbox_inches='tight') plt.show()
方法2:自定义Y轴刻度(更规范)
如果你希望这些刻度值和Matplotlib自带的轴刻度整合在一起,替换掉原来的Y轴刻度,这种方法更专业美观:
import matplotlib.pyplot as plt tick_values = [0.1, 0.2, 0.3, 0.4] fig = plt.figure(figsize=(2,20)) plt.imshow(cube1_img_rot) plt.imshow(cube2_img_rot, extent=[-19,1928,-24537, -22591]) plt.imshow(cube3_img_rot, extent=[-19,1928,-9352, -7476]) # 画出水平线,用虚线区分更清晰,可选 for y in mu_pix: plt.axhline(y, color='red', linestyle='--') # 获取当前轴对象 ax = plt.gca() # 设置Y轴刻度位置为mu_pix对应的像素位置,刻度标签为你需要的数值 ax.set_yticks(mu_pix) ax.set_yticklabels(tick_values) # 如果需要保留原有的部分刻度,可以把原刻度和自定义刻度合并: # original_ticks = ax.get_yticks() # combined_ticks = list(original_ticks) + mu_pix # combined_labels = [str(t) for t in original_ticks] + tick_values # ax.set_yticks(combined_ticks) # ax.set_yticklabels(combined_labels) plt.savefig('foo.pdf', bbox_inches='tight') plt.show()
小提示
- 一定要保证
tick_values的长度和mu_pix完全一致,不然会出现报错 - 调整文本位置或刻度样式时,可以修改
fontsize、color、linestyle这些参数来适配你的图 - 用方法1时,
x_pos的偏移量需要根据你的图像宽度灵活调整,避免文本被截断或者挡住图像内容
内容的提问来源于stack exchange,提问作者Coolcrab
相关产品推荐
相关产品推荐

