web-dev-qa-db-ja.com

SVGファイルをmatplotlib Figureにインポートする

私は高品質のプロットを作成するのが好きなので、ラスタライズされたグラフィックスをできるだけ避けます。

私は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でそれを行う方法を教えてもらえますか、少なくとも私に適切なドキュメントを示してください。

同様の質問が行われたことは知っています(ただし、回答はされません): ここ 。それ以来何か変化はありますか?

追伸高解像度のpngをエクスポートして、同様の効果を得ることができることを知っています。これは私が探している解決策ではありません。

これがインポートしたい画像です:

Earth_from_above

20
Sasha

多分あなたが探しているものは 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')

出力:

enter image description here

18
yann zerlaut