【问题标题】:Make matplotlib export figure svg without stroke使matplotlib导出图形svg无笔画
【发布时间】:2019-08-08 16:20:04
【问题描述】:

我正在尝试使用 Python 和 matplotlib 生成一个 svg 文件。我使用的代码的更简单版本如下:

import matplotlib.pyplot as plt


plt.figure()
plt.fill([0,1,0.5],[0,0,1],color = "r")
plt.fill([1.5,1,0.5],[1,0,1],color = "b")
plt.show()
plt.savefig("soedgesvg.svg")

到目前为止,结果符合预期:

但是当我在 Inkscape 中打开它时,我得到了一个没有指定颜色的意外鬼边缘。这可以在下图中看到:

在导出 svg 之前,有没有办法在 Python 中移除这条边?

编辑

仅当根据我的经验指定颜色时才会发生这种情况。

Inkscape 0.92.3 和 matplotlib 3.1.1

【问题讨论】:

  • 当我运行这段代码并用inkscape打开它时,它看起来是like this。这是 matplotlib 3.1.0,inkscape 0.91。也许您想分享您的版本?
  • 你能放大两个三角形相交的点吗?我会用版本更新问题。
  • 啊,好吧,使用linewidth=0
  • 那行得通,谢谢没想到。但是为什么这些线条没有在 matplotlib 中显示,但在 inkscape 中却显示了?您能否将此作为答案发布,以便我可以接受此作为问题的答案?
  • 因为线宽是以磅为单位定义的。当您在 matplotlib 中放大时,线条始终保持其物理尺寸,例如1/72。一英寸。当你放大 Inkscape 时,你会放大实际的图形,直到你的屏幕可能只显示 1/72。一英寸,因此这条线将与屏幕一样大。

标签: python matplotlib svg


【解决方案1】:

也可以像这样在调用plt.fill 时添加linewidth=0

plt.fill([0,1,0.5],[0,0,1],color = "r", linewidth=0)
plt.fill([1.5,1,0.5],[1,0,1],color = "b", linewidth=0)

@ImportanceOfBeingErnest 在 cmets 中提供了这个答案,解释如下:

因为线宽是以磅为单位定义的。当您在 matplotlib 中放大时,线条始终保持其物理尺寸,例如1/72。一英寸。当你放大 Inkscape 时,你会放大实际的图形,直到你的屏幕可能只显示 1/72。一英寸,因此这条线将与屏幕一样大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 2016-08-19
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2023-03-13
    • 2015-03-16
    • 2017-06-11
    相关资源
    最近更新 更多