'22/05/03更新:コードに冗長な箇所があったのを若干短くした。
本記事では、散布図や折れ線図等で判断基準線が視覚的にわかるグラフを作成する雛形コードを載せました。下図のように、グラフ中に1. 赤色の横点線を入れ、2. 「判断基準1000以上」等とテキストを挿入します。

対象コードは次のように、挿入したい位置の座標を入力します。
plt.hlines(挿入するy座標, 挿入するx座標の最小値, 挿入するx座標の最大値, 'r', linestyles='dashed')
plt.vlines(挿入するx座標, 挿入するy座標の最小値, 挿入するy座標の最大値, 'b', linestyles='dashed')
ax1.text(挿入するx座標, 挿入するy座標, 挿入するコメント, size=16, color='r')
本プログラムの仕様について説明します。
対象データは、下表のように列方向にデータが並んだcsvファイルです。例では、yデータはy1, y2, y3の3列ですが、個数はいくつでも構いません。リストで列名(カラム名)を複数指定出来る仕様です。
x |
y1 |
y2 |
y3 |
0.0 |
0.0 |
0.0 |
0 |
5.0 |
250.0 |
25.0 |
37.5 |
10.0 |
500.0 |
100.0 |
0 |
15.0 |
750.0 |
225.0 |
-75 |
20.0 |
1000.0 |
400.0 |
-150 |
25.0 |
1250.0 |
625.0 |
-187.5 |
30.0 |
1500.0 |
900.0 |
-150 |
35.0 |
1750.0 |
1225.0 |
0 |
40.0 |
2000.0 |
1600.0 |
300 |
45.0 |
2250.0 |
2025.0 |
787.5 |
50.0 |
2500.0 |
2500.0 |
1500 |
55.0 |
2750.0 |
3025.0 |
2475 |
60.0 |
3000.0 |
3600.0 |
3750 |
そして、日本語フォントを使用する場合は、下記コマンドでjapanize-matplotlibのインストールが必要です。
pip install japanize-matplotlib
そして、import japanize_matplotlib でインポートして使用します。
seabornの場合は右記リンク先を参照下さい。Python 「matplotlib」や「seaborn」のグラフ内で日本語表示する - PythonとVBAで世の中を便利にする
▼本プログラム
import os, sys
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
file_path = 'data2.csv'
file_name = os.path.basename(file_path)
print(file_name)
root, ext = os.path.splitext(file_name)
print(root, ext)
df = pd.read_csv(file_path,
header = 0,
encoding = 'utf-8',
)
df
my_x_name = 'x'
my_x_scale = 'linear'
my_x_range = (0, 70)
my_y_name_list = ['y1', 'y2', 'y3']
my_y_scale = 'linear'
my_y_range = ()
my_y_label = 'y'
base_line = 1000
base_line_comment = '判断基準\n' + str(base_line) + '以上'
my_header = 1
my_start_row_of_data = 2
fig, ax1 = plt.subplots(figsize=(8,6))
ax1.set_xscale(my_x_scale)
if my_x_range:
ax1.set_xlim(my_x_range[0], my_x_range[1])
plt.title(root, fontsize=18)
plt.xlabel(my_x_name, fontsize=20)
plt.grid(True)
for my_y_name in my_y_name_list:
ax1.plot(df[my_x_name], df[my_y_name], label=my_y_name)
ax1.scatter(df[my_x_name], df[my_y_name], facecolors='none', edgecolors='k')
if my_y_scale=='log':
ax1.set_yscale('log', basey=10)
if my_y_range:
ax1.set_ylim(my_y_range[0], my_y_range[1])
x_ticklabels = ax1.get_xticklabels()
y_ticklabels = ax1.get_yticklabels()
plt.setp(x_ticklabels, rotation=45, fontsize=16)
ax1.set_ylabel(my_y_label, fontsize=20)
plt.setp(y_ticklabels, rotation=0, fontsize=16)
plt.hlines([base_line], my_x_range[0], my_x_range[1], 'r', linestyles='dashed')
ax1.text(my_x_range[0], base_line, base_line_comment, size=18, color='r')
ax1.legend(bbox_to_anchor = (1.2, 1.0), fontsize = 16)
plt.show()
以上
<広告>
リンク
リンク