【问题标题】:Matplotlib: line length in .svg exportMatplotlib:.svg 导出中的行长
【发布时间】:2018-03-28 13:28:51
【问题描述】:

我在 matplotlib 中绘制一个多边形并将其导出到 .svg 中,这样我就可以在例如使用它。墨景。我知道您可以以英寸为单位指定图像大小,但我希望在 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")

【问题讨论】:

    标签: python matplotlib svg inkscape


    【解决方案1】:

    目前还不清楚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")
      

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

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2015-10-05
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多