'22/05/03更新:コードを簡潔に見直しました。
本記事では、2軸プロットの散布図を作成する雛形コードを載せました。
例えば、下表のような複数列のcsvデータがあったとします。x軸に列名「time」, Y軸の第一軸に列名「linear」, Y軸の第二軸に列名「log」を指定します。
すると、下図のように2軸にグラフ化します。
そして、次のようにcsvファイルが複数ある場合にも対応しています。
下図のように、色の違いがcsvファイルの違いで識別できる仕様です。
■本プログラム
import glob
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import matplotlib.cm as cm
plt.rcParams['font.size'] = 16
file_list = glob.glob('./*csv')
file_list
cnt = len(file_list)
color_list = []
for i in range(cnt):
color_list.append(cm.cool(i / cnt))
color_list
x_name = 'time'
y1_name = 'linear'
y2_name = 'log'
label = '凡例'
lenged_list = file_list
title = 'グラフ'
fig, ax1 = plt.subplots(figsize = (6, 4))
ax1.grid()
handle_list = []
for i, file in enumerate(file_list):
df = pd.read_csv(file)
x = df[x_name]
y1 = df[y1_name]
y2 = df[y2_name]
ax1.scatter(x, y1, c = color_list[i])
ax1.plot(x, y1, c = color_list[i])
ax1.set_ylim(0, 70)
ax1.set_xlabel(x_name)
ax1.set_ylabel(y1_name)
ax2 = ax1.twinx()
p1 = ax2.scatter(x, y2, c = color_list[i])
p2, = ax2.plot(x, y2, c = color_list[i])
handle_list.append(p2)
ax2.set_ylim(-11, 2)
ax2.set_ylabel(y2_name)
fig.tight_layout()
plt.legend(
handles = handle_list,
labels = lenged_list,
bbox_to_anchor = (1.85, 0.9),
title = label,
fontsize = 16,
)
plt.title(title)
plt.savefig(title + '.jpg')
以上
<広告>
リンク
リンク