本記事では、表題のことを成す雛形コードを記載しました。点は平均値で、上下に伸びてるエラーバーがここでは±3σを表します。
グラフ化する例題データは、下図のようなcsvファイルです。A列「month」をx軸にして、B列「data」に対してmonthのカテゴリ別に平均値と3σを計算してY軸にします。
■本プログラム
#!/usr/bin/env python # coding: utf-8 # In[1]: import pandas as pd import math import matplotlib.pyplot as plt plt.rcParams['font.size'] = 18 # グラフの基本フォントサイズの設定 df = pd.read_csv('test_data.csv') df # In[2]: # x軸にしたいデータをリストで抽出する x_colmun = 'month' x_list = df.groupby(x_colmun).count().reset_index()[x_colmun].tolist() print(x_list) print(type(x_list)) # In[3]: # 平均値と3σを計算する mean_list = [] shiguma_list = [] y_column = 'data' for x in x_list: # X軸にしたいカテゴリ別にデータを抽出 df_buf = df[df[x_colmun] == x] # 平均値を計算 mean_buf = df_buf[y_column].mean() mean_list.append(mean_buf) # 3σを計算 std_buf = df_buf[y_column].std(axis=0) * 3 # 列方向の標準偏差 shiguma_list.append(std_buf) print(shiguma_list) print(mean_list) # In[7]: # 折れ線図の作成(各点は平均±3σをプロット) fig = plt.figure(dpi=100) color = 'b' plt.scatter(x_list, mean_list, c=color, label='test_A') plt.errorbar(x_list, mean_list, yerr = shiguma_list, marker = 'o', capthick = 1, capsize = 10, lw = 2, c=color) #plt.xlabel('X') plt.ylabel('Y [N]') plt.title('Y vs X') # x軸のラベルを変更する x_list2 = map(lambda x: str(x) + 'mo.', x_list) plt.xticks(x_list, x_list2) ax = plt.gca() # get current axes 現在の軸設定データを取得する ax.set_facecolor('lightyellow') # 背景色の指定' y_min, y_max = ax.get_ylim() ax.set_ylim(0, math.ceil(y_max)) # スペックの挿入 y_spec = 3 # x軸の範囲(レンジ)を指定 #ax1.set_xlim(x_min, x_max) # 横線を入れる plt.hlines(y_spec, x_list[0], x_list[-1], 'r', linestyles='dashed') # テキストを挿入する plt.text(x_list[0], y_spec + 0.1, r'Spec 3[N]', size=18, color='r') ax.legend(bbox_to_anchor=(1, 0.95)) # 凡例の位置 plt.grid() plt.show() # In[ ]:
以上
<広告>
リンク
リンク