【问题标题】:Create a detailed svg graph with matplotlib使用 matplotlib 创建详细的 svg 图
【发布时间】:2020-05-20 07:39:11
【问题描述】:

我使用 Python 库 matplotlib 来绘制包含大量数据的图形。执行plt.show() 后,我可以放大并查看图表的详细信息。但是,我想将图形保存到带有plt.savefig 的 svg 文件中,并查看默认情况下从默认的非放大视图中看不到的这些详细信息。我该怎么做?

请注意,在处理矢量图形格式(如 svg 文件)时,逐英寸增加 DPI 或尺寸是没有意义的。

例如,考虑以下程序。

import matplotlib.pyplot as plt
import numpy as np
import math

x = np.arange(0,100,0.00001)
y = x*np.sin(2*math.pi*(x**1.2))
plt.plot(y)
plt.savefig('test.svg')

我们会得到下面的图,即使我们放大,也看不到正弦波周期的细节。

但是当我们用plt.show代替显示图像然后放大时,我们可以看到正弦波的细节。

【问题讨论】:

  • 保存的 svg 应该包含您需要的所有详细信息。究竟是什么问题?
  • This post 可能会有所帮助。请注意,在使用 1/72" per unit 时增加维度确实有帮助。
  • @ImportanceOfBeingErnest 它没有所有细节。我编辑了这篇文章,并用一个例子来证明我的主张。
  • @JohanC 谢谢你的链接。我从那里改编了这个例子来证明我的问题。正如您在我在编辑中提供的程序中看到的那样,我不使用任何背景和轴标记。因此链接的帖子仍然没有解决我的问题。
  • 如果你想在放大的时候看到一些东西,你需要设置一个更细的线。 plt.plot(y, linewidth=0.1)

标签: python python-3.x matplotlib svg resolution


【解决方案1】:

添加图形的大小:

import matplotlib.pyplot as plt
import numpy as np
import math

x = np.arange(0,100,0.00001)
y = x*np.sin(2*math.pi*(x**1.2))
fig = plt.figure(figsize=(19.20,10.80))

plt.plot(y)
plt.savefig('test.svg')

你会得到你想要的那种分辨率。


正如 JohanC 所正确观察到的,另一个好的解决方案是减小线条的宽度:

import matplotlib.pyplot as plt
import numpy as np
import math

x = np.arange(0,100,0.00001)
y = x*np.sin(2*math.pi*(x**1.2))
#fig = plt.figure(figsize=(19.20,10.80))

plt.plot(y, linewidth=0.1)
plt.savefig('test.svg')

【讨论】:

  • 如果不调整线宽,放大后仍然看不到太多。如果调整了线宽并且不设置figsize,放大后图像看起来很好。
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多