# '20/01/31更新:多少見易く書き直しました。
1⃣日本語フォントをpipでインストールする
pip install japanize-matplotlib
2⃣スクリプト内でそれをインポートする
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import seaborn as sns import japanize_matplotlib
3⃣seabornの場合は更にフォント指定が必要です
sns.set()でfont="IPAexGothic"と引数指定をする。下記はその記述例です。
# 行列散布図を作成する関数 def plot_matrix_scatter(label, DF, my_color): sns.set(style="ticks", font_scale=1.2, palette=my_color, color_codes=True, font="IPAexGothic") g = sns.pairplot(DF, diag_kind="hist") g.fig.suptitle(label) #, fontsize=12) g.fig.subplots_adjust(top=0.9) plt.savefig(label + '.png') plt.close()
######################################
■本記事のプログラム実行例を下図に示します。以前の記事、Python ラテン超方格法などで水準表を作成する - HK29’s blogのコードを題材に、ファイル名やグラフタイトル、凡例などを日本語化しました。
■本プログラム例
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import lhsmdu import numpy as np import pandas as pd import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import seaborn as sns import japanize_matplotlib # 乱数を生成するメイン関数 def my_random_generater(my_factors, sampling_num): dimension = len(my_factors) factor_column_names = [] for k in my_factors.keys(): factor_column_names.append(k) print(factor_column_names) ##### Monte Carlo Sampling (MCS) monte_carlo = lhsmdu.createRandomStandardUniformMatrix(dimension, sampling_num) print("モンテカルロ サンプリング") print(monte_carlo) print(sampling_num) fixed_data_np = my_calc(factor_column_names, monte_carlo) monte_carlo_DF = pd.DataFrame(fixed_data_np.T) monte_carlo_DF.columns = factor_column_names monte_carlo_DF.to_csv("01_モンテカルロ法.csv", sep=",", index=False, encoding="utf-8") plot_matrix_scatter("01_モンテカルロ法", monte_carlo_DF, "winter") ##### Latin Hypercube Sampling (LHS) latin_hypercube = lhsmdu.sample(dimension, sampling_num) print("ラテン超方格法 サンプリング") print(latin_hypercube) print(sampling_num) fixed_data_np = my_calc(factor_column_names, latin_hypercube) latin_hypercube_DF = pd.DataFrame(fixed_data_np.T) latin_hypercube_DF.columns = factor_column_names latin_hypercube_DF.to_csv("02_ラテン超方格法.csv", sep=",", index=False, encoding="utf-8") plot_matrix_scatter("02_ラテン超方格法", latin_hypercube_DF, "autumn") ##### Normal random Sampling buf=[] for cnt in range(dimension): buf.append(np.random.normal(0.5, 0.16, sampling_num)) normal_random = np.array(buf) print("正規分布 サンプリング") print(normal_random) print(sampling_num) fixed_data_np = my_calc(factor_column_names, normal_random) normal_random_DF = pd.DataFrame(fixed_data_np.T, columns = factor_column_names) normal_random_DF.to_csv("03_正規分布.csv", sep=",", index=False, encoding="utf-8") plot_matrix_scatter("03_正規分布", normal_random_DF, "gray") ##### Beta random Sampling buf=[] for cnt in range(dimension): buf.append(np.random.beta(5, 2, sampling_num)) beta_random = np.array(buf) print("ベータ分布 サンプリング") print(beta_random) print(sampling_num) fixed_data_np = my_calc(factor_column_names, beta_random) beta_random_DF = pd.DataFrame(fixed_data_np.T, columns = factor_column_names) beta_random_DF.to_csv("04_ベータ分布.csv", sep=",", index=False, encoding="utf-8") plot_matrix_scatter("04_ベータ分布", beta_random_DF, "summer") ##### plot graph x_name = "height" y_name = "width" myfont_size = 12 ax = plt.figure(num=1, dpi=100).gca() ''' ax.set_xlim(0, 1) ax.set_xticks(np.arange(0,1.1, 0.2)) ax.set_ylim(0, 1) ax.set_yticks(np.arange(0,1.1, 0.2)) ''' ax.set_xlabel(x_name) #, fontsize=myfont_size) ax.set_ylabel(y_name) #, fontsize=myfont_size) ax.set_title('ランダム サンプリング') #, fontsize=myfont_size) xy_setting_facecolors_none(ax, "01_モンテカルロ法", monte_carlo_DF, x_name, y_name, "b") xy_setting(ax, "02_ラテン超方格法", latin_hypercube_DF, x_name, y_name, "r") xy_setting(ax, "03_正規分布", normal_random_DF, x_name, y_name, "k") xy_setting(ax, "04_ベータ分布", beta_random_DF, x_name, y_name, "g") #ax.set_aspect('equal', adjustable='box') plt.legend(loc = 'upper right', bbox_to_anchor = (1.1, 0.3), borderaxespad = 0., fontsize = myfont_size) plt.grid() #plt.show() plt.savefig('00_ランダム_サンプリング.png') plt.close() # 区間0~1の乱数データを指定した最小値~最大値の区間へ変換する関数 def my_calc(factor_column_names, my_random_np_array): for i, key in enumerate(factor_column_names): my_min, my_max = my_factors[key] my_random_np_array[i] = ((my_max - my_min) * my_random_np_array[i] + my_min) fixed_data_np = np.array(my_random_np_array) return fixed_data_np # 散布図を作成する関数(塗りつぶしなし) def xy_setting_facecolors_none(ax, my_label, my_df, x_name, y_name, my_color): ax.scatter(my_df[x_name].values.tolist(), my_df[y_name].values.tolist(), facecolors='none', edgecolors=my_color, label=my_label) # 散布図を作成する関数 def xy_setting(ax, my_label, my_df, x_name, y_name, my_color): ax.scatter(my_df[x_name].values.tolist(), my_df[y_name].values.tolist(), color=my_color, label=my_label) # 行列散布図を作成する関数 def plot_matrix_scatter(label, DF, my_color): sns.set(style="ticks", font_scale=1.2, palette=my_color, color_codes=True, font="IPAexGothic") g = sns.pairplot(DF, diag_kind="hist") g.fig.suptitle(label) #, fontsize=12) g.fig.subplots_adjust(top=0.9) plt.savefig(label + '.png') plt.close() if __name__ == "__main__": # parameter my_factors = {"height":(50, 200), "width":(0.06, 0.1), "density":(1e15, 9e15), "temp":(-50, 250)} sampling_num = 100 # call function my_random_generater(my_factors, sampling_num)
以上
<広告>
リンク