如何输出与绘图坐标系坐标点一一对应的指定尺寸图像?
解决Matplotlib图像坐标系与输出像素的一一映射问题
要实现坐标系x=[0,640]、y=[0,480]与680×400像素输出图像的一一映射,核心是让绘图区域(axes)完全填充目标尺寸的画布,同时匹配坐标系范围和图像像素的对应关系,具体代码和说明如下:
关键逻辑说明
- 匹配画布与目标像素:Matplotlib的
figsize是英寸单位,图像像素尺寸 =figsize×dpi。我们直接根据目标像素计算figsize,并固定dpi保证输出尺寸准确。 - 消除边距填充画布:手动创建axes并设置其位置为
[0,0,1,1],让绘图区域完全占满画布,避免默认边距导致的偏移。 - 绑定坐标系范围:设置axes的x、y轴范围为需求的
[0,640]和[0,480],确保绘图坐标与图像像素的对应关系。
完整代码
import matplotlib.pyplot as plt # 目标输出图像的像素尺寸 target_width = 680 target_height = 400 # 设定dpi(可根据需求调整,这里选100方便计算) dpi = 100 # 根据像素尺寸计算画布的英寸尺寸 figsize = (target_width / dpi, target_height / dpi) # 创建画布,关闭边框 fig = plt.figure(figsize=figsize, dpi=dpi, frameon=False) # 创建完全填充画布的绘图区域 ax = fig.add_axes([0, 0, 1, 1]) # 关闭坐标轴显示 ax.axis('off') # 设置绘图坐标系范围 ax.set_xlim(0, 640) ax.set_ylim(0, 480) # -------------------------- # 这里添加你的绘图代码,例如: # ax.plot([0, 640], [0, 480], color='red') # -------------------------- # 保存图像,确保dpi一致且无边距 plt.savefig("./output.png", dpi=dpi, pad_inches=0, bbox_inches='tight') plt.close()
原代码无效原因
你之前的代码使用figsize=(6.4,4.8),默认dpi=100时输出的是640×480像素的图像,和需求的680×400不匹配;同时没有手动控制axes的位置,默认的axes会留有边距,导致绘图内容偏移。
内容的提问来源于stack exchange,提问作者cthugha10
相关产品推荐
相关产品推荐

