Python日本語対応グラフ描画
matplotlibの日本語対応
グラフにおける日本語表記の方法として、モジュールjapanize_matplotlibを用いる方法、あるいはmatplotlib.pyplotの辞書オブジェクトrcParamsに使用する日本語フォントを設定する方法について説明する。まず、japanize_matplotlibを用いる方法について説明し、本ウェブサイトの後半においてrcParamsを用いる方法について説明する。
モジュールjapanize_matplotlibを用いる場合はインストールする必要がある。モジュールjapanize_matplotlibはpipコマンド
pip install
japanize_matplotlib
でインストールできる。Anacondaの仮想環境においてインストールする場合も、上のpipコマンドでインストールできる。
<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>第2章で説明されている棒グラフ、ヒストグラム、散布図、折れ線グラフを描くスクリプトを日本語対応に変更した例を以下に示す。各スクリプトファイルは圧縮ファイルfiles_jp_graph.zipにまとめたので、ダウンロード解凍すれば自由に利用できる。
上掲書リスト2.1.1のスクリプトを日本語表記対応に改めたものを以下のように用意した。
import matplotlib.pyplot as plt
import japanize_matplotlib
values = [24, 10, 5]
index = [0, 1, 2]
plt.bar(index, values)
names = ['心理学>臨床心理学', '心理学=臨床心理学', 'その他']
plt.xticks(index, names)
plt.ylabel('度 数', fontsize = 14)
plt.title('心理学のイメージ', fontsize = 20)
plt.show()
実行すると図1.1のグラフが描かれる。
図1.1
上掲書リスト2.2.1を日本語表記対応に以下のように変更した。
import matplotlib.pyplot as plt
import japanize_matplotlib
Htemp = [30.1, 30.7, 25.2, 26.0, 30.5,
25.3, 28.1, 31.4, 30.5, 29.1,
28.5, 30.7, 28.3, 26.3, 29.5, 31.2, 32.0, 30.1, 26.4, 29.0,
28.2, 29.4, 29.6, 29.6, 27.7, 26.9, 30.2, 28.3, 31.3, 28.0,
31.1, 27.0, 30.0, 29.2, 29.8, 28.1, 29.5, 28.4, 28.5, 28.6,
27.6, 29.3, 30.5, 28.4, 30.3, 28.3, 26.4, 28.7, 29.7]
Ltemp = [11.9, 14.5, 12.4, 12.8, 17.0,
18.1, 15.9, 16.0, 17.4, 18.5,
19.4, 17.7, 19.1, 15.6, 17.5, 17.9, 16.2, 15.5, 17.2, 16.5,
19.4, 18.7, 19.8, 19.6, 16.9, 19.1, 19.4, 19.9, 18.9, 17.4,
17.1, 18.8, 15.9, 16.8, 16.8, 18.0, 16.7, 17.6, 17.9, 17.3,
17.5, 20.5, 19.9, 18.7, 18.9, 18.4, 20.0, 21.9, 23.9]
plt.title('最高気温と最低気温', fontsize = 20)
plt.xlabel('気温 in $^\circ\mathrm{C}$',
fontsize = 16)
plt.ylabel('度数', fontsize = 16)
plt.hist(Htemp, color = '#FFAA00',
alpha = 0.7, label = '最高気温')
plt.hist(Ltemp, color = '#0000AA',
alpha = 0.7, label = '最低気温')
plt.legend()
plt.show()
実行すると図1.2のグラフが表示される。
図1.2
上掲書2.3.1のスクリプトを日本語表記対応に下記のように改めた。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
City = ['旭川', '札幌',
'函館', '青森', '盛岡',
'仙台', '秋田',
'山形', '福島', '東京',
'横浜', '熊谷',
'千葉', '水戸', '宇都宮',
'前橋', '甲府',
'長野', '新潟', '富山',
'金沢', '福井',
'名古屋', '岐阜', '静岡',
'津', '大阪',
'神戸', '京都', '彦根',
'奈良', '和歌山', '鳥取', '松江', '岡山',
'広島', '山口',
'徳島', '高松', '松山',
'高知', '福岡',
'佐賀', '長崎', '熊本',
'大分', '宮崎',
'鹿児島', '那覇']
Htemp = [30.1, 30.7, 25.2, 26.0, 30.5,
25.3, 28.1, 31.4, 30.5, 29.1,
28.5, 30.7, 28.3, 26.3, 29.5, 31.2, 32.0, 30.1, 26.4, 29.0,
28.2, 29.4, 29.6, 29.6, 27.7, 26.9, 30.2, 28.3, 31.3, 28.0,
31.1, 27.0, 30.0, 29.2, 29.8, 28.1, 29.5, 28.4, 28.5, 28.6,
27.6, 29.3, 30.5, 28.4, 30.3, 28.3, 26.4, 28.7, 29.7]
Ltemp = [11.9, 14.5, 12.4, 12.8, 17.0,
18.1, 15.9, 16.0, 17.4, 18.5,
19.4, 17.7, 19.1, 15.6, 17.5, 17.9, 16.2, 15.5, 17.2, 16.5,
19.4, 18.7, 19.8, 19.6, 16.9, 19.1, 19.4, 19.9, 18.9, 17.4,
17.1, 18.8, 15.9, 16.8, 16.8, 18.0, 16.7, 17.6, 17.9, 17.3,
17.5, 20.5, 19.9, 18.7, 18.9, 18.4, 20.0, 21.9, 23.9]
plt.figure(figsize = (10, 8)) # in inches
plt.xlim(24, 34)
plt.ylim(10, 25)
plt.title('(最高気温、最低気温)の散布図', fontsize = 20)
plt.xlabel('最高気温 ($^\circ\mathrm{C}$)',
fontsize = 16)
plt.ylabel('最低気温 ($^\circ\mathrm{C}$)',
fontsize = 16)
plt.plot(Htemp, Ltemp, 'bo', alpha =
0.6)
for ID, H, L in zip(City, Htemp,
Ltemp):
plt.text(H + 0.1, L + 0.1,
ID, color = 'b', alpha = 0.6)
MeanH = np.mean(Htemp)
plt.vlines(MeanH, 10, 25, linestyle =
'--', color = '#FFAA00AA',
label = '平均最高気温({0:.1f}'.format(MeanH) +
'$^\circ\mathrm{C}$)')
MeanL = np.mean(Ltemp)
plt.hlines(MeanL, 24, 34, linestyle =
'--', color = '#00AAFFAA',
label = '平均最低気温({0:.1f}'.format(MeanL) +
'$^\circ\mathrm{C}$)')
plt.legend()
plt.show()
実行すると図1.3のグラフが表示される。
図1.3
上掲書2.4.1のスクリプトを日本語表記対応に以下のように書き変えた。
import matplotlib.pyplot as plt
import japanize_matplotlib
Days = [5, 6, 7, 8, 9, 10, 11, 12, 13,
14]
MaxTemp = [28, 24, 25, 27, 27, 25, 25,
27, 28, 25]
MinTemp = [18, 20, 17, 17, 20, 20, 19,
16, 17, 18]
plt.title('10日間天気予報', fontsize = 20)
plt.plot(Days, MaxTemp, 'rD',
markersize = 9)
plt.plot(Days, MinTemp, 'bs',
markersize = 9)
plt.plot(Days, MaxTemp, 'r-', linewidth
= 3, label = '最高気温')
plt.plot(Days, MinTemp, 'b-',
linewidth = 3, label = '最低気温')
plt.xlim(4, 15)
plt.ylim(15, 30)
plt.legend(loc = 'center right',
fontsize = 14)
plt.xlabel('日', fontsize = 16)
plt.ylabel('気温($^\circ\mathrm{C}$)',
fontsize = 16)
plt.show()
実行すると図1.4のように描画される。
図1.4
辞書オブジェクトrcParamsに、Windowsの場合、例えば
matplotlib.pyplot.rcParams['font.family']
= 'Yu Gothic'
と設定すれば、「Yu Gothic」で表示される。UbuntuやCentOSでは、例えば、
matplotlib.pyplot.rcParams['font.family']
= 'Noto Sans CJK JP'
である。
<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>第2章で説明されている棒グラフ、ヒストグラム、散布図、折れ線グラフを描くスクリプトを日本語対応に変更した例を以下に示す。各スクリプトファイルは圧縮ファイルfiles_jp_graph.zipにまとめたので、ダウンロード解凍すれば自由に利用できる。
上掲書リスト2.1.1のスクリプトを日本語表記対応に改めたものを以下のように用意した。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Yu
Gothic'
values = [24, 10, 5]
index = [0, 1, 2]
plt.bar(index, values)
names = ['心理学>臨床心理学', '心理学=臨床心理学', 'その他']
plt.xticks(index, names)
plt.ylabel('度 数', fontsize = 14)
plt.title('心理学のイメージ', fontsize = 20)
plt.show()
実行すると図2.1のグラフが描かれる。
図2.1
上掲書リスト2.2.1を日本語表記対応に以下のように変更した。
import matplotlib.pyplot as plt
Htemp = [30.1, 30.7, 25.2, 26.0, 30.5,
25.3, 28.1, 31.4, 30.5, 29.1,
28.5, 30.7, 28.3, 26.3, 29.5, 31.2, 32.0, 30.1, 26.4, 29.0,
28.2, 29.4, 29.6, 29.6, 27.7, 26.9, 30.2, 28.3, 31.3, 28.0,
31.1, 27.0, 30.0, 29.2, 29.8, 28.1, 29.5, 28.4, 28.5, 28.6,
27.6, 29.3, 30.5, 28.4, 30.3, 28.3, 26.4, 28.7, 29.7]
Ltemp = [11.9, 14.5, 12.4, 12.8, 17.0,
18.1, 15.9, 16.0, 17.4, 18.5,
19.4, 17.7, 19.1, 15.6, 17.5, 17.9, 16.2, 15.5, 17.2, 16.5,
19.4, 18.7, 19.8, 19.6, 16.9, 19.1, 19.4, 19.9, 18.9, 17.4,
17.1, 18.8, 15.9, 16.8, 16.8, 18.0, 16.7, 17.6, 17.9, 17.3,
17.5, 20.5, 19.9, 18.7, 18.9, 18.4, 20.0, 21.9, 23.9]
plt.rcParams['font.family'] = 'Yu
Gothic'
plt.title('最高気温と最低気温', fontsize = 20)
plt.xlabel('気温 $^\circ\mathrm{C}$', fontsize
= 16)
plt.ylabel('度数', fontsize = 16)
plt.hist(Htemp, color = '#FFAA00',
alpha = 0.7, label = '最高気温')
plt.hist(Ltemp, color = '#0000AA',
alpha = 0.7, label = '最低気温')
plt.legend(fontsize = 14)
plt.show()
実行すると図2.2のグラフが表示される。
図2.2
上掲書2.3.1のスクリプトを日本語表記対応に下記のように改めた。
import matplotlib.pyplot as plt
import numpy as np
City = ['旭川', '札幌',
'函館', '青森', '盛岡',
'仙台', '秋田',
'山形', '福島', '東京',
'横浜', '熊谷',
'千葉', '水戸', '宇都宮',
'前橋', '甲府',
'長野', '新潟', '富山',
'金沢', '福井',
'名古屋', '岐阜', '静岡',
'津', '大阪',
'神戸', '京都', '彦根',
'奈良', '和歌山', '鳥取', '松江', '岡山',
'広島', '山口',
'徳島', '高松', '松山',
'高知', '福岡',
'佐賀', '長崎', '熊本',
'大分', '宮崎',
'鹿児島', '那覇']
Htemp = [30.1, 30.7, 25.2, 26.0, 30.5,
25.3, 28.1, 31.4, 30.5, 29.1,
28.5, 30.7, 28.3, 26.3, 29.5, 31.2, 32.0, 30.1, 26.4, 29.0,
28.2, 29.4, 29.6, 29.6, 27.7, 26.9, 30.2, 28.3, 31.3, 28.0,
31.1, 27.0, 30.0, 29.2, 29.8, 28.1, 29.5, 28.4, 28.5, 28.6,
27.6, 29.3, 30.5,
28.4, 30.3, 28.3, 26.4, 28.7, 29.7]
Ltemp = [11.9, 14.5, 12.4, 12.8, 17.0,
18.1, 15.9, 16.0, 17.4, 18.5,
19.4, 17.7, 19.1, 15.6, 17.5, 17.9, 16.2, 15.5, 17.2, 16.5,
19.4, 18.7, 19.8, 19.6, 16.9, 19.1, 19.4, 19.9, 18.9, 17.4,
17.1, 18.8, 15.9, 16.8, 16.8, 18.0, 16.7, 17.6, 17.9, 17.3,
17.5, 20.5, 19.9, 18.7, 18.9, 18.4, 20.0, 21.9, 23.9]
plt.rcParams['font.family'] = 'Yu
Gothic'
plt.figure(figsize = (10, 8)) # in inches
plt.xlim(24, 34)
plt.ylim(10, 25)
plt.title('(最高気温、最低気温)の散布図', fontsize = 20)
plt.xlabel('最高気温 ($^\circ\mathrm{C}$)',
fontsize = 16)
plt.ylabel('最低気温 ($^\circ\mathrm{C}$)',
fontsize = 16)
plt.plot(Htemp, Ltemp, 'bo', alpha =
0.6)
for ID, H, L in zip(City, Htemp,
Ltemp):
plt.text(H + 0.1, L +
0.1, ID, color = 'b', alpha = 0.6)
MeanH = np.mean(Htemp)
plt.vlines(MeanH, 10, 25, linestyle =
'--', color = '#FFAA00AA',
label = '平均最高気温({0:.1f}'.format(MeanH) +
'$^\circ\mathrm{C}$)')
MeanL = np.mean(Ltemp)
plt.hlines(MeanL, 24, 34, linestyle =
'--', color = '#00AAFFAA',
label = '平均最低気温({0:.1f}'.format(MeanL) +
'$^\circ\mathrm{C}$)')
plt.legend()
plt.show()
実行すると図2.3のグラフが表示される。
図2.3
上掲書2.4.1のスクリプトを日本語表記対応に以下のように書き変えた。
import matplotlib.pyplot as plt
Days = [5, 6, 7, 8, 9, 10, 11, 12, 13,
14]
MaxTemp = [28, 24, 25, 27, 27, 25, 25,
27, 28, 25]
MinTemp = [18, 20, 17, 17, 20, 20, 19,
16, 17, 18]
plt.rcParams['font.family'] = 'Yu
Gothic'
plt.title('10日間天気予報', fontsize = 20)
plt.plot(Days, MaxTemp, 'rD',
markersize = 9)
plt.plot(Days, MinTemp, 'bs', markersize
= 9)
plt.plot(Days, MaxTemp, 'r-',
linewidth = 3, label = '最高気温')
plt.plot(Days, MinTemp, 'b-',
linewidth = 3, label = '最低気温')
plt.xlim(4, 15)
plt.ylim(15, 30)
plt.legend(loc = 'center right',
fontsize = 14)
plt.xlabel('日', fontsize = 16)
plt.ylabel('気温($^\circ\mathrm{C}$)',
fontsize = 16)
plt.show()
実行すると図2.4のように描画される。
図2.4