Python 交互作用図を作成する「interaction_plot」

'22/06/10更新:グラフの体裁のため、雛形コードを多少編集しました。
 本記事では、下図のような交互作用図を作成する雛形コードを載せました。縦軸は、出力指標Yのデータ平均で,横軸と凡例は入力因子Xです。
 例えば、凡例によって線の傾きが異なることがありえます。特に、交差する場合を交互作用があると言います。

 ここで、上図を作成した例題データは下図です。入力因子Xは、寸法A,寸法B,材料特性Cの3つで、出力指標Yは応力です。

 3つの因子Xから、2因子ずつの組み合わせを作ります。横軸と凡例に設定するためで、itertools.combinationsを使用することで、下記のようにできます

f:id:HK29:20211122234540p:plain

■本プログラム

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import pandas as pd

DF = pd.read_csv('test_data.csv', encoding = 'cp932')
DF


# In[2]:


# 2要因の組み合わせの作成
import itertools

y_name = '応力'
x_name_list = ['寸法A', '寸法B', '材料特性C']

my_combination = (list(itertools.combinations(x_name_list, 2)))
my_combination


# In[3]:


# 交互作用図の作成
from statsmodels.graphics.factorplots import interaction_plot
import matplotlib.pyplot as plt
plt.rcParams['font.size']=18
import japanize_matplotlib
import matplotlib.cm as cm

y_min = DF[y_name].min()
y_max = DF[y_name].max()

# グラフ全体のサイズ
fig = plt.figure(figsize=(22, 5), tight_layout=True)

# グラフを配置する列数を指定
fig_col = 3
# 総グラフ枚数からグラフ配置の行数を計算
fig_row = round(len(my_combination) / fig_col)
# 
for j, _ in enumerate(my_combination):
    x1, x2 = _
    
    # プロットするカラーをリストで設定
    cnt = len(DF.groupby(x2).size())
    color_list = []
    for i in range(cnt):
        color_list.append(cm.cool(i/cnt)) # jet cool autumn
    
    # 画像の設定
    ax = fig.add_subplot(fig_row, fig_col, j+1)
    plt.grid()
    
    # 交互作用プロット
    fig1 = interaction_plot(DF[x1],
                           DF[x2],
                           DF[y_name],
                           ms = 10,
                           colors = color_list,
                           ax = ax)
    
    ax1 = plt.gca() # 現在のグラフのオブジェクトを取得
    ax1.set(ylim=(y_min, y_max)) # y軸のレンジ
    ax1.set_xlabel(x1)
    ax1.set_ylabel(y_name + '_(Average)')
    ax1.legend(bbox_to_anchor=(1.00, 0.9), title = x2) # 凡例の調整
    if j != 0:
        ax1.set_ylim(None)
    ax1.grid(True)

#plt.show()
plt.savefig(y_name + '.jpg')

以上

<広告>