itsuna's blog

日々のアウトプットと備忘録

excelデータからmatplotlibで時系列グラフをつくる覚書

概要

Pythonのmatplotlibで,Excelのデータから時系列グラフを作成する覚書

Excel Fileの中身

例えば,2つのサンプルの蛍光の減衰曲線をプロットしたいとする.
Excelに解析したいデータを以下のような形式で保存する.

Time Value Sample
0 0.9 A
0.1 0.856106482 A
... ... ...
10 0.006064152 A
0 1.2 B
0.1 1.085804902 B
... ... ...
10 5.44799E-05 B

完全なファイルはこの中
github.com

グラフを作成する

ソースコード
# Written by itsuna on September 18, 2017

# モジュールをインポートする
# データ解析をサポートする"pandas"というモジュールを"pd"という名前でインポート
import pandas as pd
# グラフ作成に必要な"matplotlib"の中の"pyplot"を"plt"という名前でインポート
import matplotlib.pyplot as plt

# グラフにしたいデータの入っているExcelファイルの場所と名前を入れる
excel_path = ".\\"
excel_file_name = "time-series_ex.xlsx"
# そのExcelファイルをexcel_dataという名前で読み込む
excel_data = pd.ExcelFile(excel_path + excel_file_name)

# Excelファイルの"Sheet1"の中身をdataframe型にする.
df = excel_data.parse("Sheet1")
# 項目"Sample"の中で"A"が入っている列だけ取り出し保存
df_slow = df[df["Sample"].isin(["A"])]
# 項目"Sample"の中で"B"が入っている列だけ取り出し保存
df_fast = df[df["Sample"].isin(["B"])]

# 図の枠組みを作る
fig = plt.figure()
ax = fig.add_subplot(111)
# 図の背景を白("w")にする. というか,この行を書かなければ白
fig.set_facecolor("w")
# グラフの背景を灰色("#f0f0f0")にする.もちろんカラーコードでOK
ax.set_facecolor("#f0f0f0")

# df_slowの"Time"をx軸に,"Value"をy軸にして,シアン色("c")でプロット
ax.plot(df_slow["Time"], df_slow["Value"], "c", label="A")
# df_fastの"Time"をx軸に,"Value"をy軸にして,マゼンタ色("m")でプロット
ax.plot(df_fast["Time"], df_fast["Value"], "m", label="B")

# グラフのタイトルを緑色("g")かつフォントサイズを18にして,"Time-Series"として追加
ax.set_title("Time-Series", fontsize=18, color="g")
# グラフのx軸名をオレンジ色("#ff8c00")かつフォントサイズを12にして,"Time (sec)"として追加
ax.set_xlabel("Time (sec)", fontsize=12, color="#ff8c00")
# グラフのy軸名をネイビー色("#000080")かつフォントサイズを12にして,"Intensity (a.u.)"として追加
ax.set_ylabel("Intensity (a.u.)", fontsize=12, color="#000080")

# グラフの枠を青色("b")にする
for spine in ax.spines.values():
	spine.set_color("b")
# x軸の範囲を0から10にする.この行を書かなければ自動で決まる
ax.set_xlim(0, 10)
# y軸の範囲を0から1.3にする.この行を書かなければ自動で決まる
ax.set_ylim(0, 1.3)
# x, y軸の目盛りのフォントを12に, 目盛りを赤色("r")に, 目盛りの文字色を黄色("y")にする
ax.tick_params(labelsize=12, color="r", labelcolor="y")
# legend
ax.legend(bbox_to_anchor=(1,1))

# 図の余白を減らす
fig.tight_layout()

# 図を見る
plt.show()
# 保存するなら,plt.show()を消し,下のplt.savefig()を有効にする
# plt.savefig("time-series_ex1.png")

# 図の情報をすべて捨てる
plt.close()

github.com

結果

f:id:itsuna:20170919192928p:plain