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

#Excelデータをmatplotlibでグラフ化する

Excelデータをmatplotでグラフ化する(自分用の)基本のコードです。
普段は、これをもとに好きに拡張しています。

環境
・Ubuntu16.04
・Python3.5.2
・matplotlib2.0.0
・pandas0.19.2,numpy1.11.3
・Inkscape(eps→emf変換で使用)

##まずはシンプルに
![cell.png](https://qiita-image-store.s3.amazonaws.com/0/110861/b27433a1-14c9-fd97-42ea-f2690f7c5b91.png)

Excelシートの左上(A1セル)にグラフ用データ(X軸,Y軸)をコピペして使うケース。
グラフ化したいX軸とY軸のデータがすでに存在している場合を想定しています。
・報告書(Word)に貼り付けたいけど、Excelのグラフに不満があるとか
・Excelの指数表記に不満があるとか
そういうちょっとしたときに限って、プロット方法をすっかり忘れちゃってたりとかします。

既存Excelシートの任意のセル範囲のデータでグラフ化は[(2)](http://qiita.com/gitytm15/items/7e7a86e6b3e6bd03a8a3)で述べたいと思います。

##Inkscapeを使ってepsファイルをemf(拡張メタファイル)へ変換する

出力されたグラフはepsとpngで保存しています。
emfファイルはword文書に貼るときなどに便利ですので、その方法を。

Inkscapeはコマンドラインから使えるので、オプション-Mを使って

```
$ inkscape sample.eps -M sample.emf
```

としたいところなのですが、次のようなエラーがでてうまくいかない…

```
parser error : Start tag expected, '<' not found
%!PS-Adobe-3.0 EPSF-3.0
^
** (inkscape:5467): WARNING **: Specified document sample.eps cannot be opened (does not exist or not a valid SVG file)
```

このへんのことは一旦あと回しにして、
とりいそぎemfファイル作って報告書に貼らなきゃなので
普通にinkscapeを開いて変換する方法です。

(2017.2.21 追加)
↓ここに解決方法(Inkscape使用)を書きました
[matplotlibのグラフをemfファイル形式に変換](http://qiita.com/gitytm15/items/418ddcd8f58555d7433b)

・Inkscapeでepsファイルを開いて、「名前をつけて保存」でemfを選択する。

　グラフに日本語を使用している場合は、
　[インポート設定]のPopplerを使用してインポートするをチェックしていないと文字化けする。(Popplerが何か知らない…)

![ink.png](https://qiita-image-store.s3.amazonaws.com/0/110861/50587042-5349-75d3-c181-ee0813911f8e.png)


ダイレクトにemf保存できればいいんだけどよくわかんない。

追記(2017.2.21)
[ぴよぴよの日々](http://hiyohiyo.asablo.jp/blog/2015/03/23/7596515)さんによると、emfの出力機能は削除されている。なんと…

```
matplotlib-1.3.1 のドキュメントに "変更点" の説明がありました。
こう書かれていたのです。
「機能の整理をして、emf 出力機能はこのバージョンから削除された」
何ですって...
```
いまのmatplotlibのバージョンは2.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'
```
これが現在の環境の出力可能ファイルタイプのようです。

##コード
というわけで以下がそのコードとなります。
pandasで読み込んだExcelファイル(xls,xlsx)のDataFrameから
x軸とy軸データを抜き取り、plotに投げているだけです。

抜き取り方は、列で指定する方法やラベル名で指定する方法などがあります。

```python:graph.py
# coding: utf-8

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# フォントファイルの場所を指定 ubuntu　　(C:\Windows\Fonts\任意のFont)
fp = FontProperties(fname="/usr/share/fonts/truetype/fonts-japanese-gothic.ttf") 

####################################################################
filepath='~/Desktop/sample.xls' #Xlsファイルの場所

df=pd.read_excel(filepath) #Pandas DataFrameに読込み

#データフレームからx軸とY軸データを読み込む

#列で指定
x=df[[0]]
y=df[[1]]

#ラベルで指定する場合
#x=df['X']
#y=df['Y']

####################################################################
#Graph
####################################################################
fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.set_yscale('linear')
#ax1.set_yscale('log')

ax1.set_ylim(-1.1, 1.1)
ax1.set_xlim(0,360)

ax1.set_title("グラフ sample",fontdict = {"fontproperties": fp},fontsize=12)
ax1.set_xlabel("x軸",fontdict = {"fontproperties": fp},fontsize=12)
ax1.set_ylabel("y軸",fontdict = {"fontproperties": fp},fontsize=12)

#ax1.plot(x, y,'red',label='sin')
ax1.scatter(x, y,s=1,c='r',label='sin')
ax1.legend(loc="upper right")

#ファイルを保存 pngとepsの両方で保存
plt.savefig("sample.png")
plt.savefig("sample.eps")
plt.show()
```