Up

Python日本語対応グラフ描画

matplotlibの日本語対応

 

グラフにおける日本語表記の方法として、モジュールjapanize_matplotlibを用いる方法、あるいはmatplotlib.pyplotの辞書オブジェクトrcParamsに使用する日本語フォントを設定する方法について説明する。まず、japanize_matplotlibを用いる方法について説明し、ウェブサイト後半においてrcParamsを用いる方法について説明する。

 

モジュールjapanize_matplotlibを用いる場合はインストールする必要がある。モジュールjapanize_matplotlibpipコマンド

 

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に設定する方法

辞書オブジェクトrcParamsに、Windowsの場合、例えば

 

matplotlib.pyplot.rcParams['font.family'] = 'Yu Gothic'

 

と設定すれば、「Yu Gothic」で表示される。UbuntuCentOSでは、例えば、

 

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

 

 

Up