2020年5月4日月曜日

【matplotlib】円グラフ作成と体裁の変更

 グラフ描画ライブラリ matplotlib を用いた円グラフ作成方法とグラフの体裁の変更方法を説明する。円グラフを作成するには matplotlib.pyplot.pie を使用する。

 ライブラリ matplotlib を使う場合にはインポートが必要。 matplotlib.pyplot は通常以下の書式で plt と略されインポートされる。

import matplotlib.pyplot as plt



1. 円グラフの作成

 円グラフを作成するには matplotlib.pyplot.pie を用いる。書式は以下の通り。

matplotlib.pyplot.pie(x, 
                     explode=None,
                     labels=None, 
                     colors=None, 
                     autopct=None, 
                     pctdistance=0.6, 
                     shadow=False, 
                     labeldistance=1.1, 
                     startangle=None, 
                     radius=None, 
                     counterclock=True, 
                     wedgeprops=None, 
                     textprops=None, 
                     center=(0, 0), 
                     frame=False, 
                     rotatelabels=False, 
                     \*, 
                     data=None)

 引数は下表の通り。必須の引数はグラフの値xのみ。

引数 意味
x グラフの値をリストなど1次元の配列で指定。必須
explode 各水準の扇形の外側へのずれ量。オプション。デフォルトはずれ量なし
labels 水準名をリストなど1次元の配列で指定。。オプション。デフォルトは表示なし
colors 各水準の扇形の色。オプション。デフォルトは自動で色が割り振られる
autopct 各水準の面積比(%)を表示するかどうか。オプション(デフォルトは表示なし)
pctdistance autopctでパーセンテージを表示する場合の円の中心と文字の位置の比。オプション(デフォルトは0.6)
shadow 扇形に下に影を付けるかどうか。オプション(デフォルトは影なし)
normalize 扇形の合計を1にするかどうか。デフォルトは1(True)。Falseを指定した場合、xが1以下では部分的な円グラフとなり、xが1より大きい場合エラーとなる
labeldistance 水準名の表示位置を半径で指定。デフォルトは1.1。Noneとした場合水準名が表示されない。
startangle 円グラフの描画開始角度。デフォルトは0でx軸方向。半時計周りに数字が大きくなる
radius 円グラフの直径。デフォルトは1
counterclock 円グラフの進行方向。デフォルトはTrueで反時計回り。Falseで時計回り
wedgeprops 扇形の境界線の表示と属性の設定。デフォルトは無し(None)
textprops テキストの属性の設定。
center 円グラフの中心座標。デフォルトは(0, 0)
frame 座標軸の表示。デフォルトはFalse
rotatelabels Trueでラベルを円周に沿った向きに変更。デフォルトはFalse

 最低限の円グラフを作成するには必須の引数 x を設定すればよい。 x にそれぞれの水準の大きさ(円グラフの扇型のサイズ比に相当)を設定し、 plt.pie(x) でグラフが作成され plt.show() でグラフが表示される。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x)
plt.show()


2. グラフの体裁変更

explodeの指定

 explodeは扇型を外側にずらす量を設定できる。半径を1とした場合のずれ量を水準毎に設定する。2番目の水準のみ0.1ずらす場合。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
exp = [0, 0.1, 0, 0]

plt.pie(x, explode=exp)
plt.show()


labelsの指定

 labelsは扇型の外側に水準名を表示する。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
lab = ['A', 'B', 'C', 'D']

plt.pie(x, labels=lab)
plt.show()


colorsの指定

 colorsは扇型の色を指定する。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
col = ['pink', 'purple', 'blue', 'gold']

plt.pie(x, colors=col)
plt.show()


autopctの指定

 各水準の面積比(%)を表示する場合は引数 autopct を使う。 autopct には表示する桁数を%表記で与える。

整数で表示する場合 autopct='%1.0f%%' となる。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, autopct='%1.0f%%')
plt.show()


小数点以下1桁まで表示する場合 autopct='%1.1f%%' とする。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, autopct='%1.1f%%')
plt.show()


pctdistanceの指定

 autopctで各水準の面積比(%)を表示する場合の表示位置をpctdistanceにより中心からの距離で設定する。半径が距離1でデフォルトは0.6。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, 
        autopct='%1.0f%%',
        pctdistance=0.85)
plt.show()


shadowの指定

 shadowTrueとすると扇形の下に影が付く。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
exp = [0.05, 0.05, 0.05, 0.05]

plt.pie(x,
        explode=exp, 
        shadow=True)
plt.show()


normalizeの指定

 normalizeは扇型の面積の合計を1にするかどうかを決めデフォルトはTrue(合計1)。Falseとした場合、値xの合計が1以下であれば一周に満たない円グラフとなり値の合計が1より大きいとerrorになる。

import matplotlib.pyplot as plt

x = [0.10, 0.12, 0.24, 0.07]

plt.pie(x, normalize=False)
plt.show()


labeldistanceの指定

 labeldistancelabelで水準名を表示する場合の中心からの距離を指定する。デフォルトは1.1。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
lab = ['A', 'B', 'C', 'D']

plt.pie(x, 
        labels=lab,
        labeldistance=0.7)
plt.show()


startangle, counterclockの指定

 startangleは1つ目の水準の開始角度。デフォルトは0で3時の方向を示す。counterclockは扇型の進行方向で、デフォルトはTrueで反時計回りとなる。

デフォルト設定では一つ目の水準の開始位置が3時の方向で、反時計回りにグラフが書かれていく。より一般的な、開始位置を12時の方向にして時計回りにグラフを書いていく設定にするには、引数に開始位置 startangle=90と回転方向counterclock=Noneを与える。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, 
        startangle=90,
        counterclock=None)
plt.show()


radiusの指定

 radiusで円グラフの半径を指定する。デフォルトは1

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, radius=0.6)
plt.show()


wedgepropsの指定

 wedgepropsで扇形の輪郭線を描画できる。デフォルトは輪郭線なし。wedgepropsには属性を辞書型にした引数を使う。指定可能な属性はmatplotlib.patches.Wedgeを参照。
線幅3pxの灰色の輪郭線を描画する場合。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, 
        wedgeprops={'linewidth': 3, 
                    'edgecolor':'#404040'})
plt.show()


textpropsの指定

 textpropsで表示するテキストの書式を設定できる。引数は属性を辞書型にする。指定可能な属性はmatplotlib.textを参照。

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
lab = ['A', 'B', 'C', 'D']

plt.pie(x,
        labels=lab, 
        textprops={'size': 20, 
                   'color':'blue',
                   'style': 'oblique'})
plt.show()


frameの指定

 frameTrueにするとグラフの外枠が表示される。デフォルトはFalse

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]

plt.pie(x, frame=True)
plt.show()


rotatelabelsの指定

 rotatelabelsTrueにするとラベルの向きが円周に沿った向きとなる。デフォルトはFalse

import matplotlib.pyplot as plt

x = [10, 12, 24, 7]
lab = ['A', 'B', 'C', 'D']

plt.pie(x,
        labels=lab, 
        rotatelabels=True)
plt.show()


3. リファレンス

matplotlib.pyplot.pie

使用バージョン:Python 3.7.0 / matplotlib 3.2.1

0 件のコメント:

コメントを投稿