【问题标题】:How to export svg in matplotlib with correct mm scale如何在 matplotlib 中以正确的 mm 比例导出 svg
【发布时间】:2018-11-28 05:17:55
【问题描述】:

我正在尝试从 matplotlib 导出图形以进行激光切割。该图以毫米为单位绘制。

我正在通过获取以英寸为单位的边界框然后将图形大小设置为该值来确保正确的比例:

import matplotlib.pyplot as plt
ax = plt.subplot(111)

<snipped for brevity...plotting of lines and paths>

x_bound = map(mm_to_inch, ax.get_xbound())
y_bound = map(mm_to_inch, ax.get_ybound())
plt.gcf().set_size_inches(x_bound[1] - x_bound[0], y_bound[1] - y_bound[0])
plt.axis('off')
plt.savefig('{0}.svg'.format(self.name, format='svg'))

导出的 .svg 大约是预期比例的 2/3,我对轴和图形不够熟悉,不知道为什么。此外,预期的几何图形周围有一个黑色边框。这是一些示例输出: .svg output (converted to .png)

我应该如何移除黑色边框并正确缩放 .svg?

【问题讨论】:

    标签: matplotlib svg export scale figure


    【解决方案1】:

    您可能希望完全删除轴周围的边距,

    plt.gcf().subplots_adjust(0,0,1,1)
    

    但我可能会注意到,结果对于应用程序而言可能不够精确。当然也可以考虑使用 CAD 程序创建图形。

    【讨论】:

    • 谢谢,抱歉发布了另一个答案!
    【解决方案2】:

    根据 ImportanceOfBeingErnest 的回答和对其他 stackoverflow 问题的一些回答,以下解决方案有效:

    plt.axis('off')
    plt.margins(0, 0)
    plt.gca().xaxis.set_major_locator(plt.NullLocator())
    plt.gca().yaxis.set_major_locator(plt.NullLocator())
    plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
    
    x_bound = map(mm_to_inch, self._ax.get_xbound())
    y_bound = map(mm_to_inch, self._ax.get_ybound())
    plt.gcf().set_size_inches(x_bound[1] - x_bound[0], y_bound[1] - y_bound[0])
    

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 2013-05-09
      • 1970-01-01
      • 2015-01-01
      • 2023-03-13
      • 2018-06-30
      • 2020-09-05
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多