2016-09-08 4 views

答えて

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() 
関連する問題