Matplotlib:.svg 导出中的线长
Matplotlib: line length in .svg export
我在 matplotlib 中绘制一个多边形并将其导出为 .svg 以便我可以在 eg 中使用它。墨景。我知道您可以以英寸为单位指定图像大小,但我希望在 Inkscape 中打开时将长度为“1”的线映射到长度为 1 英寸的线。
import matplotlib.pyplot as plt
plt.close('all')
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_aspect('equal')
plt.savefig("line.svg")
不清楚 ax.set_aspect('equal')
会在这里做什么。所以我会删除它。
接下来,您需要做的是让轴坐标系与图形尺寸同步。
此时从问题中不清楚您到底想做什么。
用 3 英寸长的线创建一个 3 英寸的图形
让坐标系从 0 到 1,移除轴内的任何边距。
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.margins(0)
plt.savefig("line.svg")
或者让坐标系从0到3,让直线长3个单位。
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,3],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_xlim(0,3)
plt.savefig("line.svg")
用 1 英寸长的线创建一个 3 英寸的图形
让坐标系从0到1,创建一条长度为1/3单位的线
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1/.3],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_xlim(0,1)
plt.savefig("line.svg")
或者让坐标系从 0 到 3 并创建一条 1 个单位长度的线。
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_xlim(0,3)
plt.savefig("line.svg")
最后一种方法似乎是最直观的方法,但由于从问题中不太清楚图形的英寸大小应如何与轴单位相关,因此我提供了所有可能的解决方案。
我在 matplotlib 中绘制一个多边形并将其导出为 .svg 以便我可以在 eg 中使用它。墨景。我知道您可以以英寸为单位指定图像大小,但我希望在 Inkscape 中打开时将长度为“1”的线映射到长度为 1 英寸的线。
import matplotlib.pyplot as plt
plt.close('all')
f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_aspect('equal')
plt.savefig("line.svg")
不清楚 ax.set_aspect('equal')
会在这里做什么。所以我会删除它。
接下来,您需要做的是让轴坐标系与图形尺寸同步。
此时从问题中不清楚您到底想做什么。
用 3 英寸长的线创建一个 3 英寸的图形
让坐标系从 0 到 1,移除轴内的任何边距。import matplotlib.pyplot as plt f,ax = plt.subplots(figsize=(3,3)) plt.plot([0,1],[0,0]) ax.axis('off') plt.gca().set_position([0, 0, 1, 1]) ax.margins(0) plt.savefig("line.svg")
或者让坐标系从0到3,让直线长3个单位。
import matplotlib.pyplot as plt f,ax = plt.subplots(figsize=(3,3)) plt.plot([0,3],[0,0]) ax.axis('off') plt.gca().set_position([0, 0, 1, 1]) ax.set_xlim(0,3) plt.savefig("line.svg")
用 1 英寸长的线创建一个 3 英寸的图形
让坐标系从0到1,创建一条长度为1/3单位的线import matplotlib.pyplot as plt f,ax = plt.subplots(figsize=(3,3)) plt.plot([0,1/.3],[0,0]) ax.axis('off') plt.gca().set_position([0, 0, 1, 1]) ax.set_xlim(0,1) plt.savefig("line.svg")
或者让坐标系从 0 到 3 并创建一条 1 个单位长度的线。
import matplotlib.pyplot as plt f,ax = plt.subplots(figsize=(3,3)) plt.plot([0,1],[0,0]) ax.axis('off') plt.gca().set_position([0, 0, 1, 1]) ax.set_xlim(0,3) plt.savefig("line.svg")
最后一种方法似乎是最直观的方法,但由于从问题中不太清楚图形的英寸大小应如何与轴单位相关,因此我提供了所有可能的解决方案。