"はやぶさ"の技術ノート

『MyPlot』をGoogle Colaboratoryで動かしてみる

普段のやり方にで実験データをグラフ化

野暮ったいグラフができる…

In [1]:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

values1 = [1, 3, 4, 8, 1, 5, 2, 2, 8, 5]    # 実験データ1
values2 = [5, 2, 5, 1, 2, 4, 2, 1, 3, 4]    # 実験データ2

# データフレーム生成
df = pd.DataFrame({'values1': values1, 'values2': values2})

# グラフ化
df.plot()
Out[1]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f6ab9fd4400>

自分用データ視覚化デザインにカスタム

【ポイント】

  • 縦/横軸の単位は明記
  • フォントは大きく
  • やっぱりグリッドほしい
  • 閾値など見るポイントを明記
In [3]:
from matplotlib.ticker import MultipleLocator

# 1. 色を原色のRGBとは違ういい感じの赤青緑に
from cycler import cycler
c = plt.get_cmap('Set1').colors
plt.rcParams['axes.prop_cycle'] = cycler(color = c)

fig, ax = plt.subplots(figsize = (7, 5))

# 2. 凡例を消す
# 3. 線幅を太くする
df.plot(ax = ax, linewidth = 3, legend = False)

# 4. y軸ラベルを表示
# 5. x軸y軸の表示範囲を変更
x_min, x_max = 0, 9
y_min, y_max = 0, 10
ax.set(ylim = (y_min, y_max), xlim = (x_min, x_max + 0.03))

# 6. 文字サイズまとめて指定
plt.rcParams["font.size"] = 16

# 7. グラフのタイトル、X 軸、Y 軸の名前 (ラベル)、グリッド線を表示
plt.title("”Value2” keeps a low level (below 6) !!")
plt.xlabel("Time[ms]")
plt.ylabel("Volt[mV]")
plt.grid(True)

# 8. 右と上の枠を消す
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# 9. 通常の凡例の代わりにプロットの右側にindexを表示
for i, name in enumerate(df.columns.values):
    ax.text(x_max + 0.03, ax.lines[i].get_data()[1][-1], name, color = f'C{i}', va = 'center')

カスタムにもう一工夫

見るポイントがひと目で分かるようにする。

In [4]:
from matplotlib.ticker import MultipleLocator

# 1. 色を原色のRGBとは違ういい感じの赤青緑に
from cycler import cycler
c = plt.get_cmap('Set1').colors
plt.rcParams['axes.prop_cycle'] = cycler(color = c)

fig, ax = plt.subplots(figsize = (7, 5))

# 2. 凡例を消す
# 3. 線幅を太くする
df.plot(ax = ax, linewidth = 3, legend = False)

# 4. y軸ラベルを表示
# 5. x軸y軸の表示範囲を変更
x_min, x_max = 0, 9
y_min, y_max = 0, 10
ax.set(ylim = (y_min, y_max), xlim = (x_min, x_max + 0.03))

# 6. 文字サイズまとめて指定
plt.rcParams["font.size"] = 16

# 7. グラフのタイトル、X 軸、Y 軸の名前 (ラベル)、グリッド線を表示
plt.xlabel("Time[ms]")
plt.ylabel("Volt[mV]")
plt.grid(True)

# 8. 右と上の枠を消す
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# 9. 通常の凡例の代わりにプロットの右側にindexを表示
for i, name in enumerate(df.columns.values):
    ax.text(x_max + 0.03, ax.lines[i].get_data()[1][-1], name, color = f'C{i}', va = 'center')
    
# 10. 閾値の線を追加
th = 6
# plt.hlines(th, x_min, x_max + 0.1, "Magenta", linestyle = "--", lw = 1.5)
plt.hlines(th, x_min, x_max + 0.1, "Orange", linestyle = "--", lw = 3)
 
# 11. 矢印と吹き出し追加
from matplotlib.patches import Ellipse
 
el = Ellipse((2, -1), 0.5, 0.5)
 
# 3msの矢印
ps_x1, ps_y1 = 50, 40
pf_x1, pf_y1 = 3, 8
ax.annotate('Over 6',
            xy = (pf_x1, pf_y1), xycoords = 'data',
            xytext = (ps_x1, ps_y1), textcoords = 'offset points',
            size = 20,
            # bbox=dict(boxstyle="round", fc="6"),
            arrowprops = dict(arrowstyle = "fancy",
                            fc = "0.6", ec = "none",
                            patchB = el,
                            connectionstyle = "angle3, angleA = 0, angleB = -90"))
 
# 8msの矢印
ps_x2, ps_y2 = 50, 40
pf_x2, pf_y2 = 8, 8
ax.annotate('Over 6',
            xy = (pf_x2, pf_y2), xycoords = 'data',
            xytext = (ps_x2, ps_y2), textcoords = 'offset points',
            size = 20,
            # bbox=dict(boxstyle="round", fc="6"),
            arrowprops = dict(arrowstyle = "fancy",
                            fc = "0.6", ec = "none",
                            patchB = el,
                            connectionstyle = "angle3, angleA = 0, angleB = -90"))
 
# 12. 吹き出し
ann = ax.annotate('”Value2” keeps a low level !! \n (below 6) ',
                  xy = (9, 3.7), xycoords = 'data',
                  xytext = (0, -60), textcoords = 'offset points',
                  size = 20,
                  bbox = dict(boxstyle = "round",
                            fc = (1.0, 0.7, 0.7),
                            ec = (1.0, 0.5, 0.5)),
                  arrowprops = dict(arrowstyle = "wedge, tail_width = 1.",
                                  fc = (1.0, 0.7, 0.7), ec = (1.0, 0.5, 0.5),
                                  patchA = None,
                                  patchB = el,
                                  relpos = (0.2, 0.8),
                                  connectionstyle = "arc3, rad = -0.1"))

イイ感じ!『MyPlot』をGoogle Colaboratoryから動かせました!