DataScience

【Python】【Seaborn】日本語文字化けを直す

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