短期集中:Pythonでグラフを描く その2

Python
この記事は約12分で読めます。

Python勉強企画、4日目は、 いろいろなグラフを描いてみます。

棒グラフ

まずは小学校以来お馴染みの棒グラフを描いてみましょう。

サンプルソース

from matplotlib import pyplot

labels = ["茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "山梨県", "長野県"]
data = [2860, 1934, 1942, 7350, 6259, 13921, 9198, 2223, 811, 2049]

pyplot.rcParams["font.family"] = "MS Gothic"
pyplot.rcParams["figure.figsize"] = (8, 5)
pyplot.bar(labels,data)
pyplot.title("関東甲信越各県の人口")
pyplot.xlabel("都県名")
pyplot.ylabel("人口(1000人)")
pyplot.show()

(人口データは総務省統計局ホームページ『都道府県年齢三区分別人口』より抜粋、2021.08.25)

実行例

コードの説明

データの準備

labels = ["茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "山梨県", "長野県"]
data = [2860, 1934, 1942, 7350, 6259, 13921, 9198, 2223, 811, 2049]

データは横軸、縦軸それぞれ別のリストにしておきます。数値のリストだと座標値になりますが、文字列は要素順に並びます。

描画の設定

pyplot.rcParams["font.family"] = "MS Gothic"
pyplot.rcParams["figure.figsize"] = (8, 5)

ここでは、グラフ描画のためのいろいろなパラメータを設定しています。

pyplot.rcParams

pyplot.rcParams()メソッドは、pyplotでグラフ描画を行うための様々な設定を行うことができます。個別に設定メソッドが存在するものと違って、グラフ全体にかかわる値を設定することになります。

font.family は、グラフ中の文字列表示に使用するフォントを指定するプロパティです。ここでは、デフォルトのフォントのままだと日本語が化けてしまうので、日本語表示可能なフォント MS Gothic を指定しています。

figure.figsize は、描画するグラフの大きさを指定するプロパティです。デフォルトのサイズだと横幅が足りず横軸のラベルが重なってしまうので、少し広げてあります。単位はインチで、デフォルト値は (6.4, 4.8) です。

グラフ描画

pyplot.bar(labels,data)
pyplot.title("関東甲信越各県の人口")
pyplot.xlabel("都県名")
pyplot.ylabel("人口(1000人)")
pyplot.show()
棒グラフ描画

棒グラフを描画するには pyplot.bar() メソッドを使用します。引数として横軸のデータリスト、縦軸のデータリストを与えます。

pyplot.title()、pyplot.xlabel()、pyplot.ylabel()、pyplot.show() メソッドは多角形描画の時と同様です。pyplot.rcParams[“font.famly”] でフォントを指定しているので、個別に fontname=”MS Gothic” とする必要はありません。

折れ線グラフ

これまた小学校以来お馴染みの折れ線グラフです。多角形の時に使った pyplot.plot() メソッドで描画できるので簡単です。

サンプルソース

from matplotlib import pyplot

labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
data1 = [14.0, 19.5, 23.9, 25.6, 32.6, 32.3, 34.6, 35.6, 36.2, 30.3, 23.9, 18.9]
data2 = [-1.2, -1.2, 1.1, 2.3, 7.9, 13.9, 17.7, 20.7, 17.1, 12.1, 1.6, 2.2]

pyplot.rcParams["font.family"] = "MS Gothic"
pyplot.plot(labels, data1, color="red" , label="最高気温")
pyplot.plot(labels, data2, color="blue", label="最低気温")
pyplot.title("最高気温・最低気温")
pyplot.xlabel("月")
pyplot.ylabel("温度(℃)")
pyplot.legend()
pyplot.show()

実行例

コード解説

データの準備

labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
data1 = [14.0, 19.5, 23.9, 25.6, 32.6, 32.3, 34.6, 35.6, 36.2, 30.3, 23.9, 18.9]
data2 = [-1.2, -1.2, 1.1, 2.3, 7.9, 13.9, 17.7, 20.7, 17.1, 12.1, 1.6, 2.2]

今回は2つの折れ線グラフを1つの図に描画してみます。棒グラフと同様、横軸用として項目名リスト、縦軸用として値リストを用意します。グラフを2つ描画するので、縦軸用のリストも2つです。

描画

pyplot.rcParams["font.family"] = "MS Gothic"
pyplot.plot(labels, data1, color="red" , label="最高気温")
pyplot.plot(labels, data2, color="blue", label="最低気温")
pyplot.title("最高気温・最低気温")
pyplot.xlabel("月")
pyplot.ylabel("温度(℃)")
pyplot.legend()
pyplot.show()

グラフの描画には、多角形の時とおなじ pyplot.plot() メソッドを使用します。他の設定は棒グラフと同じです。

凡例の表示

複数のデータを表示する場合、どのグラフがどのデータを指すのかを表す凡例を表示できます(実行例の右上)。

pyplot.plot(labels, data1, color="red" , label="最高気温")
pyplot.plot(labels, data2, color="blue", label="最低気温")

(中略)

pyplot.legend()

凡例に表示する文字列は、pyplot.plot() メソッドに label=”文字列” として指定します。
その後で pyplot.legend() メソッドを実行すると凡例が表示されます。

ヒストグラム

サンプルソース

from matplotlib import pyplot
import random

random.seed()
data = [random.normalvariate(172,6) for x in range(1000)]

pyplot.hist(data, bins=10, range=(150,200))
pyplot.show()

実行例

コード解説

データの準備

random.seed()
data = [random.normalvariate(172,6) for x in range(1000)]

ヒストグラムはデータ数がある程度多くないと見栄えがしないので(苦笑)、乱数で生成しています。

正規分布乱数

random.normalvariate()関数は、正規乱数(正規分布に従う乱数)を生成します。
※正規乱数はテストやデモ用のダミーデータを作る時に重宝しています

書式は、

random.normalvariage(average, sigma)

です。average(平均値)とsigma(標準偏差)を指定します。

random.normalvariate(172,6)

この例では、平均値172、標準偏差6の正規乱数を生成します。
(※日本人20代男性の身長の分布がだいたいこの値です)

リストの生成
data = [random.normalvariate(172,6) for x in range(1000)]

Python独特の書き方ですが、これは

data = []
for x in range(1000):
    data.append(random.normalvariate(172,6)

と同じ動作です。

[ 式 for 変数 in イテラブル ]

という書式で、イテラブル(リストなど、複数の要素が1列にならんだデータ形式)から要素を1つずつ取り出しながら”式”を繰り返し評価し、その結果の値を並べたリストを作ります。

この例では”式”が正規乱数の生成なので、正規乱数を1000個並べたリストを作ります。

グラフの描画

pyplot.hist(data, bins=10, range=(150,200))
pyplot.show()
pyplot.hist()メソッド

ヒストグラムの表示は pyplot.hist() メソッドで行います。引数にはデータのリストを与えます。

2つ目以降の引数はオプションです。オプションで与えられる主な項目には以下のようなものがあります。

bins プロパティは、階級(棒)の数です。デフォルトは10です。

range プロパティは、(最少,最大) の形式で最大値と最小値を設定します。省略すると存在するデータの最小値と最大値を採用してしまうので、半端な値になってしまうことがあります。

この例では150~200の範囲を10個の階級に分けています。

他にもいろいろなプロパティがあります。

円グラフ

サンプルソース

from matplotlib import pyplot

labels = ["Windows","iOS","Android","OS X","Linux","Ubuntu","Unknown"]
data   = [4197,996,615,435,106,61,159]

pyplot.pie(data, labels=labels, counterclock=False, startangle=90)
pyplot.show()

実行例

数の少ない項目名の文字が重なってしまっていますが…。

コード解説

データの準備

labels = ["Windows","iOS","Android","OS X","Linux","Ubuntu","Unknown"]
data   = [4197,996,615,435,106,61,159]

棒グラフと同様、項目名リストと値リストを用意します。

ちなみにこれは当ブログのブラウザ別アクセス数です。

グラフの描画

pyplot.pie(data, labels=labels, counterclock=False, startangle=90)
pyplot.show()
pyplot.pie()メソッド

ヒストグラムの表示は pyplot.pie() メソッドで行います。引数にはデータのリストを与えます。

2つ目以降の引数はオプションです。オプションで与えられる主な項目には以下のようなものがあります。

labels プロパティは、項目名のリストを指定します。

counterclock プロパティは、項目を並べていく回転方向を表します。Trueだと時計回り、Falseだと時計回りになります。デフォルトはTrueです。

startangle プロパティは、項目を並べる開始位置の角度を表します。デフォルトは0(時計の3時方向)です。コンピュータ言語の関数で角度を指定する場合は大抵ラジアンなのですが、なぜかこのプロパティは度単位です。

日本で円グラフを各場合は上を起点にして時計回りに項目を描いていくことが多いと思うので、この例では counterclock=False, startangle=90 を指定しています。

というわけで。

今回はいろいろなグラフを描いてみました。それぞれここで紹介したもの以外にもいろいろな設定項目があるようです。いつか機会があればまとめる…か?

コメント

タイトルとURLをコピーしました