matplotlibプロットをsvgに保存するときにmiterlimitを設定する方法はありますか?私はこのバグをプログラム的に回避したい:https://bugs.launchpad.net/inkscape/+bug/1533058 私は手動でこれを ".svg"テキストファイルで変更する必要があるのに対し、matplotlibでsvgとして保存するときにmiterlimitを設定する方法
2
A
答えて
1
このパラメータは'stroke-miterlimit': '100000'
と定義されており、backend_svg.pyではハード設定されています。 matplotlibrcにはこのようなパラメータはありません。そのため、スタイルシートによるカスタマイズは可能ではありません。
私はこの問題を解決するには、次のコードを使用:その後、
def fixmiterlimit(svgdata, miterlimit = 10):
# miterlimit variable sets the desired miterlimit
mlfound = False
svgout = ""
for line in svgdata:
if not mlfound:
# searches the stroke-miterlimit within the current line and changes its value
mlstring = re.subn(r'stroke-miterlimit:([0-9]+)', "stroke-miterlimit:" + str(miterlimit), line)
if mlstring[1]: # use number of changes made to the line to check whether anything was found
mlfound = True
svgout += mlstring[0] + '\n'
else:
svgout += line + '\n'
else:
svgout += line + '\n'
return svgout
(このpostからトリックで)このようにそれを呼び出す:
import StringIO
...
imgdata = StringIO.StringIO() # initiate StringIO to write figure data to
# the same you would use to save your figure to svg, but instead of filename use StringIO object
plt.savefig(imgdata, format='svg', dpi=90, bbox_inches='tight')
imgdata.seek(0) # rewind the data
svg_dta = imgdata.buf # this is svg data
svgoutdata = fixmiter(re.split(r'\n', svg_dta)) # pass as an array of lines
svgfh = open('figure1.svg', 'w')
svgfh.write(svgoutdata)
svgfh.close()
コードは基本的に脳卒中を変更ファイルに書き込む前に、SVG出力のmiterlimitパラメータ。私のために働いた。
1
素敵な答えのためのdrYGと質問のためのアイオラスのおかげで。私はこのinkscapeのバグとmatplotlibの設定を変更する簡単な方法がないため、同様の問題があります。しかし、drYGの答えはpython3ではうまくいかないようです。私はそれを更新し、いくつかのタイプミス(Pythonのバージョンに関係なく)と思われるものを変更しました。うまくいけば、私は失ったものを補うように努力するので、誰か他の誰かを救うでしょう!
def fixmiterlimit(svgdata, miterlimit = 10):
# miterlimit variable sets the desired miterlimit
mlfound = False
svgout = ""
for line in svgdata:
if not mlfound:
# searches the stroke-miterlimit within the current line and changes its value
mlstring = re.subn(r'stroke-miterlimit:([0-9]+)', "stroke-miterlimit:" + str(miterlimit), line)
#if mlstring[1]: # use number of changes made to the line to check whether anything was found
#mlfound = True
svgout += mlstring[0] + '\n'
else:
svgout += line + '\n'
return svgout
import io, re
imgdata = io.StringIO() # initiate StringIO to write figure data to
# the same you would use to save your figure to svg, but instead of filename use StringIO object
plt.gca()
plt.savefig(imgdata, format='svg', dpi=90, bbox_inches='tight')
imgdata.seek(0) # rewind the data
svg_dta = imgdata.getvalue() # this is svg data
svgoutdata = fixmiterlimit(re.split(r'\n', svg_dta)) # pass as an array of lines
svgfh = open('test.svg', 'w')
svgfh.write(svgoutdata)
svgfh.close()
関連する問題
- 1. SVGイメージをSVGイメージとして保存する方法
- 2. Windows XPとVistaでタイムゾーンの設定を保存する方法
- 3. キャンバスをサーバ上にsvgとjsonとして保存する
- 4. XMLフォーマット設定をプロジェクトに保存する方法とワークスペースを保存する方法はありますか?
- 5. svgイメージを迅速に保存して取得する方法。
- 6. SVGを内部ストレージに保存し、それを取得してImageViewに設定する方法は?
- 7. 設定ファイルにアプリケーション設定を保存する方法は?
- 8. matplotlibのサブプロットにxlimとylimを設定する方法
- 9. svgコンテナを.svgファイルとして保存するためのツールキットが一切ない方法ですか?
- 10. fabricjsでsvgの幅と高さを設定する方法は?
- 11. Python matplotlibをTIFFとして保存
- 12. 設定を変更してボタンを保存する方法は?
- 13. JDialogを終了して設定を保存する方法?
- 14. コンテンツタイプを設定して.xlsxファイルを保存する方法
- 15. ユーザー設定を使用して保存する方法
- 16. 初めてモデルを保存したあとに設定を消す方法
- 17. スカラマップをテーブルとして保存する方法と、テーブルをファイルに保存する方法
- 18. 設定を定数に簡単に保存する方法は?
- 19. Laravelに設定ファイルを正しく保存する方法は?
- 20. イメージをファイルに保存するときに保存が間違っている方向を指定します。
- 21. ファイルを保存するときにPDFとして保存するWordマクロ
- 22. Javascriptでファイルシステムにbase64をイメージとして保存する方法
- 23. iPhoneに設定をすぐに保存する方法は?
- 24. matplotlib PDFを保存するときの線幅
- 25. セルを選択してPDFとして保存するときにセル名としてシートを保存する
- 26. cで保存せずにアプリケーション設定を設定する方法
- 27. 保存しないときにビットマップを圧縮する方法
- 28. VSコード設定とスニペットファイルを別の場所に保存する方法
- 29. matplotlib、savefig、画像をplt.show()に保存する方法
- 30. svgファイル(Inkscape)に改行を保存する方法は?