You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:24