'21/06/15更新:グラフ化のオプション設定をいくつか追記しました。
複数のcsvファイルから下図のような散布図一枚を作成する雛形コードを載せました。
下図は、csvファイルの例です。一行目がヘッダーでなくても、データ開始行が2行目でなくても、pandasだと簡単に読み込むことができます。そして、グラフ化についても、pandasデータフレームとX軸とY軸にする列名を指定して引数に渡す仕様のため容易です。
関数名は、plot_df_func(df_list, label_list, x_data_name, y_data_name)で、引数は4つあります。順に、①複数csvファイルを読み込んでデータ前処理したpnadasデータフレームのリスト、②グラフ表示する凡例(ラベル)のリスト、③x軸にするデータの列名、④y軸にするデータの列名です。
■本プログラム
JupyterLabで作成したコードを.pyファイルに出力したコードです。AnacondaPromptなどのCUI上でも実行できます。JupyterLabなどの場合は、上から順にインタラクティブに実行します。
import glob
import re
file_list = glob.glob('./*csv')
file_list = sorted(file_list, key=lambda x:int((re.search(r"[0-9]+", x)).group(0)))
print(file_list)
import pandas as pd
df_list = []
for file in file_list:
df = pd.read_csv(file,
skiprows = [2],
header = 1,
encoding = 'cp932',
)
df2 = df.copy()
df_list.append(df2)
df_list
myXscale = 'linear'
myYscale = 'linear'
my_x_range = (0, 15)
my_y_range = ()
base_line = 75
n_files = len(file_list)
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import japanize_matplotlib
plt.rcParams["font.size"] = 14
from matplotlib.axes._axes import _log as matplotlib_axes_logger
matplotlib_axes_logger.setLevel('ERROR')
def plot_df_func(DF_list, LABEL_list, X_name, Y_name):
plt.figure(num=1, figsize=(8, 6), dpi=100, facecolor='w', edgecolor='k')
for i, (my_DF, my_LABEL) in enumerate(zip(DF_list, LABEL_list)):
x_list = my_DF[X_name].values.tolist()
y_list = my_DF[Y_name].values.tolist()
plt.scatter(x_list, y_list, c=cm.hsv(i/n_files), s=30)
plt.plot(x_list, y_list, c=cm.hsv(i/n_files), label=my_LABEL)
plt.xscale('log') if myXscale=='log' else plt.xscale(myXscale)
plt.yscale('log') if myYscale=='log' else plt.yscale(myYscale)
ax = plt.gca()
y_min, y_max = ax.get_ylim()
if my_y_range:
y_min, y_max = my_y_range
plt.ylim(y_min, y_max)
else:
ax.set_ylim(0, y_max)
if my_x_range:
plt.hlines([base_line], my_x_range[0], my_x_range[1], 'r', linestyles='dashed')
ax.text(my_x_range[0], base_line, '判断基準' + str(base_line), size=22, color='r')
plt.legend(loc='best', fontsize=18)
plt.title("graph", fontsize=18)
plt.xlabel(X_name, fontsize=20)
plt.ylabel(Y_name, fontsize=20)
plt.tick_params(labelsize=18)
plt.grid(which="both")
plt.tight_layout()
plt.show()
label_list = file_list.copy()
x_data_name = 'x'
y_data_name = 'stress'
plot_df_func(df_list, label_list, x_data_name, y_data_name)
以上
<広告>
リンク
リンク