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")
    

    最后一种方法似乎是最直观的方法,但由于从问题中不太清楚图形的英寸大小应如何与轴单位相关,因此我提供了所有可能的解决方案。