# '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)
g.fig.subplots_adjust(top=0.9)
plt.savefig(label + '.png')
plt.close()
######################################
■本記事のプログラム実行例を下図に示します。以前の記事、Python ラテン超方格法などで水準表を作成する - HK29’s blogのコードを題材に、ファイル名やグラフタイトル、凡例などを日本語化しました。



■本プログラム例
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 = 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 = 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")
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")
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")
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)
ax.set_ylabel(y_name)
ax.set_title('ランダム サンプリング')
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")
plt.legend(loc = 'upper right',
bbox_to_anchor = (1.1, 0.3),
borderaxespad = 0.,
fontsize = myfont_size)
plt.grid()
plt.savefig('00_ランダム_サンプリング.png')
plt.close()
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)
g.fig.subplots_adjust(top=0.9)
plt.savefig(label + '.png')
plt.close()
if __name__ == "__main__":
my_factors = {"height":(50, 200),
"width":(0.06, 0.1),
"density":(1e15, 9e15),
"temp":(-50, 250)}
sampling_num = 100
my_random_generater(my_factors, sampling_num)
以上
<広告>
リンク