Matplotlib导出SVG时如何让绘图单位与物理英寸对应?
让Matplotlib绘制的线段在Inkscape中1单位对应1英寸的解决方案
你的需求很明确——要让Matplotlib里数据坐标长度为1的线段,导出SVG后在Inkscape里正好对应1英寸。原代码已经有了基础框架,但需要调整几个关键设置来对齐数据单位和物理英寸,我来帮你修改并解释:
修改后的代码
import matplotlib.pyplot as plt plt.close('all') # 设置画布尺寸为3x3英寸,和我们要的坐标范围对应 f, ax = plt.subplots(figsize=(3, 3)) # 绘制长度为1的线段(数据坐标0到1) plt.plot([0, 1], [0, 0], linewidth=2) # 关闭坐标轴显示 ax.axis('off') # 让绘图区域完全占满画布,去掉所有边距 ax.set_position([0, 0, 1, 1]) # 强制等比例,避免拉伸变形 ax.set_aspect('equal') # 设置坐标轴范围,确保数据坐标的范围和画布尺寸匹配(3英寸对应0-3的坐标) ax.set_xlim(0, 3) ax.set_ylim(0, 3) # 保存SVG,pad_inches=0确保没有额外的空白边距 plt.savefig("line.svg", pad_inches=0)
关键调整点解释
- 画布尺寸与坐标范围匹配:把
figsize设为(3,3),同时将坐标轴范围xlim和ylim设为(0,3),这样数据坐标里的1单位就正好对应画布上的1英寸。 - 完全移除边距:
ax.set_position([0,0,1,1])让绘图区域占满整个画布,配合pad_inches=0保存,确保SVG里没有多余的空白区域,避免Inkscape里显示的尺寸和预期不符。 - 等比例锁定:
ax.set_aspect('equal')保证线段不会因为画布拉伸变形,确保水平/垂直方向的1单位都是1英寸。
你导出这个SVG后,在Inkscape里打开,用测量工具检查那条从(0,0)到(1,0)的线段,应该正好是1英寸长。如果需要更大的画布,只需要同步调整figsize和坐标轴范围就行(比如figsize=(5,5)对应xlim(0,5))。
内容的提问来源于stack exchange,提问作者CyrielN
相关产品推荐
相关产品推荐

