seabornやmatplotlibでグラフ描画する時に日本語が混じっていると文字化けが発生する。
少し前までは、matplitlibでグラフ作成をする場合はfontを設定する必要があったが、今ではjapanize_matplotlibをimportするだけで日本語が正常に表示されるようになる。
seabornでグラフを作成する場合も、fontに日本語対応フォントを設定するかjapanize_matplotlibをimportすれば、日本語が正常に表示される。
- japanize_matplotlibをimportする
- 日本語対応フォントを設定する
データ作成
グラフ作成対象のデータ作成。日本語多め。
import pandas as pd
data1 = [25, 25, 30]
data2 = [15, 25, 28]
index = ["Aさん", "Bさん", "Cさん"]
df = pd.DataFrame(data={"収入": data1, "支出": data2}, index=index)
# 名前毎に収入と支出をまとめて棒グラフを作成する
data = df.stack().rename_axis(["名前", "分類"]).reset_index().rename(columns={0: "金額(万円)"})
print(data)
名前 分類 金額(万円)
0 Aさん 収入 25
1 Aさん 支出 15
2 Bさん 収入 25
3 Bさん 支出 25
4 Cさん 収入 30
5 Cさん 支出 28
文字化けするグラフ
グラフ作成のためにmatplotlibとseabornを単純にインポートしただけだと文字化けする。
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(16, 9), facecolor="w")
sns.barplot(data=data, x="名前", y="金額(万円)", hue="分類")
title = "収入と支出"
plt.title(title)
plt.legend(loc="upper left", bbox_to_anchor=(1,1))

タイトル、x軸、y軸、レジェンドなど、全て文字化けしている。
japanize_matplotlibをimportする方法
japanize_matplotlibをインストールしていない場合はpipからインストールする。
> pip install japanize-matplotlib
japanize_matplotlibをインポートするだけで文字化けが解消する。
import japanize_matplotlib
plt.figure(figsize=(16, 9), facecolor="w")
sns.barplot(data=data, x="名前", y="金額(万円)", hue="分類")
title = "収入と支出"
plt.title(title)
plt.legend(loc="upper left", bbox_to_anchor=(1,1))

日本語が正常に表示される。
日本語対応フォントを設定する方法
japanize_atplotlibをimportしても良いが、日本語対応のフォントを設定することでも文字化けは解消する。
# フォントをmeiryoに設定
sns.set(font="meiryo")
plt.figure(figsize=(16, 9), facecolor="w")
sns.barplot(data=data, x="名前", y="金額(万円)", hue="分類")
title = "収入と支出"
plt.title(title)
plt.legend(loc="upper left", bbox_to_anchor=(1,1))

meiryoは特にフォントをインストールする必要もなく、パワーポイントでの資料作成時などにもよく使うフォントなのでおススメ。