将 svg 文件导入 matplotlib 图形

新手上路,请多包涵

我喜欢制作高质量的图,因此尽可能避免光栅化图形。

我正在尝试将 svg 文件导入到 matplotlib 图中:

 import matplotlib.pyplot as plt
earth   = plt.imread('./gfx/earth.svg')
fig, ax = plt.subplots()
im      = ax.imshow(earth)
plt.show()

这与 png 完美配合。有人可以告诉我如何使用 svg 或至少将我指向正确的文档。

我知道有人问过类似的问题(但没有回答): 这里。从那以后有什么改变吗?

PS 我知道我可以导出一个高分辨率的 png 并达到类似的效果。这不是我正在寻找的解决方案。

这是我要导入的图像:

Earth_from_above .

原文由 Sasha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

也许你正在寻找的是 svgutils

 import svgutils.compose as sc
from IPython.display import SVG # /!\ note the 'SVG' function also in svgutils.compose
import numpy as np

# drawing a random figure on top of your SVG
fig, ax = plt.subplots(1, figsize=(4,4))
ax.plot(np.sin(np.linspace(0,2.*np.pi)), np.cos(np.linspace(0,2.*np.pi)), 'k--', lw=2.)
ax.plot(np.random.randn(20)*.3, np.random.randn(20)*.3, 'ro', label='random sampling')
ax.legend()
ax2 = plt.axes([.2, .2, .2, .2])
ax2.bar([0,1], [70,30])
plt.xticks([0.5,1.5], ['water  ', ' ground'])
plt.yticks([0,50])
plt.title('ratio (%)')
fig.savefig('cover.svg', transparent=True)
# here starts the assembling using svgutils
sc.Figure("8cm", "8cm",
    sc.Panel(sc.SVG("./Worldmap_northern.svg").scale(0.405).move(36,29)),
    sc.Panel(sc.SVG("cover.svg"))
    ).save("compose.svg")
SVG('compose.svg')

输出:

在此处输入图像描述

原文由 Yann Zerlaut 发布,翻译遵循 CC BY-SA 4.0 许可协议

任何在 2021 年来到这里的人…

我建议看看 cairosvg

( conda install -c conda-forge cairosvgpip3 install cairosvg )

https://cairosvg.org/

 import cairosvg
import matplotlib.pyplot as plt
from PIL import Image
from io import BytesIO

img_png = cairosvg.svg2png("... the content of the svg file ...")
img = Image.open(BytesIO(img_png))
plt.imshow(img)

原文由 raphael 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题