LoginSignup
8

More than 5 years have passed since last update.

matplotlibのグラフをemfファイル形式に変換

Posted at

matplotlibのグラフをemfファイル形式に変換

Excelデータをmatplotlibでグラフ化する(1)

↑ここで述べましたが、emfファイル形式で直接保存できないという悩みがありました。
自分なりの解決方法をみつけたので、ここにまとめておきます。

環境

・Ubuntu16.04
・Python3.5.2
・matplotlib2.0.0
・Inkscape0.91(eps→emf変換で使用) ←これがインストールされている必要があります

方法

(1)matplotlibで描いたグラフをsvg形式で保存する
plt.savefig('sample.svg')

(2)コマンドラインから
 Inkscape [変換元ファイル名.svg] -M [ファイル名.emf]

$ inkscape sample.svg -M sample.emf

pythonから一発でやる場合

コマンドラインをpythonで実行する方法はこんなんでいいんでしょうか。
とりあえずこれでやりたいことはできました。

sample.py
import subprocess
from matplotlib import pyplot as plt

fig, ax = plt.subplots()
ax.plot([1,2,3])

plt.savefig("sample.svg")
subprocess.call('inkscape sample.svg -M sample.emf',shell=True)
plt.show()

以上

(memo)matplotlib2.0.0で保存可能な形式

このようにして調べました

import matplotlib.pyplot as plt
fig = plt.figure()
print(fig.canvas.get_supported_filetypes())

結果がリストがこれ

'pdf': 'Portable Document Format', 
'ps': 'Postscript', 
'rgba': 'Raw RGBA bitmap', 
'pgf': 'PGF code for LaTeX',
'svgz': 'Scalable Vector Graphics', 
'svg': 'Scalable Vector Graphics', 
'raw': 'Raw RGBA bitmap', 
'eps': 'Encapsulated Postscript', 
'png': 'Portable Network Graphics'

(memo)inkscape0.91 コマンドラインオプション

使用法: inkscape [オプション...] [ファイル...]

有効なオプション:
-V, --version Inkscape のバージョンを表示
-z, --without-gui X サーバーを使用しない (コンソールでファイルの処理だけを行う)
-g, --with-gui $DISPLAY 変数が設定されていなくても X サーバーの利用を試みる
-f, --file=ファイル名 指定したドキュメントを開く
(オプション文字列は無視されることがあります)
-p, --print=ファイル名 指定されたファイルにドキュメントを印刷 ('| program' を使うとパイプ)
-e, --export-png=ファイル名 ドキュメントを PNG ファイルにエクスポート
-d, --export-dpi=DPI ビットマップへのエクスポートおよび PS/EPS/PDF
のフィルターのラスタライズの解像度 (デフォルトは 90)
-a, --export-area=x0:y0:x1:y1 SVG ユーザー単位でのエクスポート領域 (デフォルトはページ、0,0
は左下の角)
-D, --export-area-drawing エクスポート領域は (ページでなく) 描画全体
-C, --export-area-page エクスポート領域はページ全体
--export-margin=値 PS/EPS/PDF のみ、エキスポート領域周辺のマージンを mm で設定
(デフォルトは 0)
--export-area-snap エクスポート領域外のビットマップを SVG
ユーザー単位の近似整数値へスナップ
-w, --export-width=幅 生成されるビットマップ幅をピクセル値で指定
(エクスポート解像度より優先)
-h, --export-height=高さ 生成されるビットマップの高さをピクセル値で指定
(エクスポート解像度より優先)
-i, --export-id=ID エクスポートするオブジェクトの ID
-j, --export-id-only export-id
のオブジェクトのみをエクスポートし、他はすべてエクスポートしない
(export-id 指定の場合のみ)
-t, --export-use-hints ファイル名や DPI ヒントを使用してエクスポート (export-id指定の場合のみ)
-b, --export-background=色 エクスポートビットマップの背景色 (SVG でサポートされるカラー文字列)
-y, --export-background-opacity=値 エクスポートビットマップの透明度 (0.0から1.0、または1から255)
-l, --export-plain-svg=ファイル名 プレーン SVG ファイルへエクスポート
(sodipodiやinkscape名前空間を使用しない)
-P, --export-ps=ファイル名 ドキュメントを PS ファイルにエクスポート
-E, --export-eps=ファイル名 ドキュメントを EPS ファイルにエクスポート
--export-ps-level=PS レベル エクスポートに使用する PostScript レベルを選択してください。レベル 2
(デフォルト) と 3 が使用可能です。
-A, --export-pdf=ファイル名 ドキュメントを PDF ファイルにエクスポート
--export-pdf-version=PDF_VERSION 指定されたバージョンの PDF でエキスポートする。(ヒント: PDF
エキスポートダイアログで確認できる正確な文字列を指定すること。例:
"PDF 1.4" は PDF-a に準拠)
--export-latex テキストを除き PDF/PS/EPS へエクスポートする。PDF/PS/EPS に加え LaTeX
ファイルをエクスポートすると、テキストは PDF/PS/EPS
の先頭に置かれる。LaTeX には \input{latexfile.tex} のような出力が含まれる。
-M, --export-emf=ファイル名 ドキュメントを拡張メタファイル (EMF) にエクスポート
-m, --export-wmf=ファイル名 ドキュメントを Windows メタファイル (WMF) にエクスポート
-T, --export-text-to-path エクスポート時にテキストオブジェクトをパスに変換 (PS, EPS, PDF, SVG)
--export-ignore-filters ラスタライズの代わりにフィルターされたオブジェクトをフィルターなしでレンダリング (PS, EPS, PDF)
-X, --query-x 描画全体か、指定がある場合は --query-id のオブジェクトの X
座標を問い合わせ
-Y, --query-y 描画全体か、指定がある場合は --query-id のオブジェクトの Y
座標を問い合わせ
-W, --query-width 描画全体か、指定がある場合は --query-id
のオブジェクトの幅を問い合わせ
-H, --query-height 描画全体か、指定がある場合は --query-id
のオブジェクトの高さを問い合わせ
-S, --query-all すべてのオブジェクトの id,x,y,w,h を一覧表示
-I, --query-id=ID 位置や大きさを問い合わせるオブジェクトの ID
-x, --extension-directory エクステンションのディレクトリを出力して終了
--vacuum-defs 未使用の定義をドキュメントの defs セクションから削除する
--verb-list Inkscape の すべての VERB の ID を一覧表示
--verb=VERB-ID Inkscape を開いたときに呼び出す VERB
--select=OBJECT-ID Inkscape を開いたときに選択するオブジェクトの ID
--shell Inkscape をインタラクティブシェルモードで起動

Help options:
-?, --help Show this help message
--usage Display brief usage message

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8