pie【円グラフ】3.1 / 3.3 / 3.7 / 3.8

メモ ( 基本 ラベル 修飾 ドーナツチャート データの指定方法 関連設定 ) 構文 設定・グラフパーツ

pieのサンプル

メモ

円グラフの基本

ラベル

修飾

ドーナツチャート

データの指定方法

その他

  • bar【棒グラフ (縦)】を極座標に描画することでも、 円グラフドーナツチャートの描画が可能

関連設定


構文

matplotlib.pyplot.pie(
    x (配列形式:サイズ)※data,
    explode (配列形式:中心からの移動距離)※data =None,
    labels (list:要素ラベル)※data =None,
    colors (配列形式:色)※data =None,
    autopct (自動数値ラベル)=None,
    pctdistance (float:数値ラベルの距離)=0.6,
    shadow (bool | dict3.8:くさび形の影)=False,
    labeldistance (要素ラベルの距離)=1.1,
    startangle (float:開始角度)=None 03.3,
    radius (float:半径)=None 13.3,
    counterclock (bool:描画回転方向)=True,
    wedgeprops (dict:くさび形のプロパティ)=None,
    textprops (dict:テキストのプロパティ)=None,
    center ((float, float):中心座標)=(0, 0),
    frame (bool:軸フレームの有無)=False,
    rotatelabels (bool:要素ラベルの回転有無)=False,
    *,
    normalize (正規化)3.3 =None,
    hatch (ハッチングパターン)3.7 =None,
    data (ラベル名指定データ)=None)
matplotlib.axes.Axes.pie(同上)
戻り値下記の tuple
    ・patches (list):Wedge【くさび形】インスタンスのリスト
    ・texts (list):要素ラベルのText【テキスト】インスタンスのリスト
    ・autotexts (list):数値ラベルのText【テキスト】インスタンスのリスト (autopct=None の場合、なし)

x (1次元3.3 配列形式)※data各くさび形のサイズ
explode (配列形式)※data各くさび形の中心からの移動距離 (半径の割合で指定 / None:移動なし)
labels (list)※data各くさび形の要素ラベル
colors (配列形式)※data各くさび形の (循環して使用 / None:自動)
autopct (None | str | callable)自動数値ラベル (None:なし / str:% 形式のフォーマット文字列 / 関数:数値を引数として呼び出し)
pctdistance (float)数値ラベルの距離 (半径を1とする弧の中心点からの距離 / autopct=None:無視)
shadow (bool | dict3.8 )くさび形の影 (True:あり / False:なし / dict3.8:Shadow【影】のプロパティ)
labeldistance (float | None3.1 )くさび形の要素ラベルの距離 (半径を1とする / None:描画なし)
startangle (float)開始角度 (デフォルト:3時の位置(x軸)から反時計回り)
radius (float)くさび形の半径 (1:標準)
counterclock (bool)描画回転方向 (True:反時計回り / False:時計回り)
wedgeprops (dict)Wedge【くさび形】のプロパティ
textprops (dict)Text【テキスト】のプロパティ
center (float, float)チャートの中心座標
frame (bool)軸フレームの有無 (True:あり / False:なし)
rotatelabels (bool)要素ラベルの回転有無 (True:回転あり / False:回転なし)
以下、キーワード引数
normalize (None | bool:キーワード引数)3.3正規化
    True (正規化あり):xの合計が 1 (完全な円) になる様に正規化 (デフォルトになる予定)
    False (正規化なし):不完全な円のまま (xの合計が 1 を超えると、ValueError 例外)
    Nonexの合計が1以上でTrue、その他はFalse (非推奨になる予定)
hatch (str | list)3.7ハッチングパターン
    str:全要素で共通 (wedgeprops (Wedge【くさび形】のプロパティ)の 'hatch' 指定と同等)
    list[str]:各要素で循環して使用
data (キーワード引数)ラベル名指定データ (※data:ラベル名指定可・詳細は、データの指定方法 参照・下記が対象)
    ・x (サイズ)
    ・explode (中心からの移動距離)
    ・labels (要素ラベル)
    ・colors (色)

Wedge【くさび形】のプロパティ

プロパティデフォルト取得設定備考
agg_filtercallableagg フィルター
alphaスカラー
None
アルファ値 (0:透明 ~ 1:不透明)
animatedboolアニメーション使用の有無
antialiased
aa 3.1
bool
None
アンチエイリアス処理の有無
capstyleCapStyle 3.4
str
外枠の実線以外の線端スタイル
スタイル備考
'butt'
_enums.CapStyle.butt
butt
'projecting'
_enums.CapStyle.projecting
projecting
'round'
_enums.CapStyle.round
round
(center) (x, y)中心座標
clip_boxBbox
clip_onboolクリッピングの有無 (True:範囲内のみ描画 / False:範囲外にも描画可)
clip_pathPatch
(Path, Transform)
None
colorcolor【色定義】edgecolor【外枠の色】facecolor【塗りつぶし色】 (未指定時)
containsunknownピッカーイベント (参照:picker【ピッカーイベント】)
edgecolor
ec 3.1
color【色定義】
None
'auto'
外枠の色
facecolor
fc 3.1
color【色定義】
None
塗りつぶし色
figureFigure所属フィギュア
fillbool塗りつぶしの有無
gidstrグループId (識別子として利用可)
hatchstrハッチングパターン
組合せ可・同一文字の繰り返しは高密度
PostScript・PDF・SVG・Aggバックエンドでのみサポート
パターン備考
'/'斜線 (左下がり)
'\'斜線 (右下がり)
'|'垂直線
'-'水平線
'+'格子
'x'斜め格子
'o' (小文字オー)円 (小)
'O' (大文字オー)円 (大)
'.' (ドット)ドット
'*'星印
in_layoutboolレイアウト計算に含めるか否か
joinstyleJoinStyle 3.4
str
外枠の結合スタイル
スタイル備考
'bevel'
_enums.JoinStyle.bevel
bevel
'miter'
_enums.JoinStyle.miter
miter
'round'
_enums.JoinStyle.round
round
labelobject凡例ラベル (アンダースコアで始まるラベルは対象外)
linestyle
ls 3.1
str外枠の線種
スタイル備考
'-' (ダッシュ)
'solid'
solid実線
'--' (ダブルダッシュ)
'dashed'
dashed破線
'-.'
'dashdot'
dashdot一点鎖線
':' (コロン)
'dotted'
dotted点線
'' (空文字列)
' ' (半角スペース) 3.4
'None' 3.4
'none' 3.4
線なし
(offset, on-off-seq)
(offset, on-off-seq)
ユーザ定義
offset:開始位置オフセット
on-off-seq:線のありなしの対
例:二点鎖線
(0, (6.5, 1.5, 1, 1.5, 1, 1.5))
linewidth
lw 3.1
float
None
外枠の線の幅
(path) パス
path_effectsAbstractPathEffect
pickerNone
bool
float
callable
None:
bool:ピッカーイベント有無
float:
callable:ピッカーイベント
(radius) 半径
rasterizedboolラスタライズ(ビットマップ) 描画の強制有無
sketch_params(scale: float, length: float, randomness: float)
snapbool
None
スナップ (ピクセル位置補正) の有無
(Agg・MacOSX バックエンドのみサポート)
(theta1) 開始角度
(theta2) 終了角度
transformTransform
urlstrハイパーリンクURL (SVG のみ対応)
visiblebool表示有無
(width)
zorderfloatZオーダー (大きい方が手前)

Text【テキスト】のプロパティ

プロパティデフォルト取得設定備考
agg_filteragg フィルター
alphaスカラー
None
アルファ値 (0:透明 ~ 1:不透明)
animatedboolアニメーション使用の有無
backgroundcolorcolor【色定義】背景色
bboxdict with properties for patches.FancyBboxPatch
clip_boxBbox
clip_onboolクリッピングの有無 (True:範囲内のみ描画 / False:範囲外にも描画可)
clip_pathPatch
(Path, Transform)
None
color
c 3.1
color【色定義】前景色
contains3.3ピッカーイベント (参照:picker【ピッカーイベント】)
figureFigure所属フィギュア
fontfamily
family3.1
strフォントファミリー (フォント名)
指定値備考
フォント名
(以下はフォントファミリー)
個別のフォント名
'serif'セリフ
'sans-serif'サンセリフ
'cursive'筆記体
'fantasy'装飾書体
'monospace'等幅フォント
fontname3.1strフォント名 (上記参照)
fontproperties
font3.3
font_properties3.1
font_manager.FontProperties
str3.3
pathlib.Path3.3
フォントプロパティ
型 (プロパティ)デフォルト値備考
FontPropertiesfamilyrcParams['font.family']
('sans-serif')
フォントファミリー (詳細はfontfamily参照)
stylercParams['font.style']
('normal')
フォントスタイル (詳細はfontstyle参照)
variantrcParams['font.variant']
('normal')
(詳細はfontvariant参照)
stretchrcParams['font.stretch']
('normal')
フォント拡張 (詳細はfontstretch参照)
weightrcParams['font.weight']
('normal')
フォントの太さ (詳細はfontweight参照)
sizercParams['font.size']フォントサイズ (詳細はfontsize参照)
fnameNoneフォントファイルの絶対パス
math_fontfamily 3.4rcParams["mathtext.fontset"]
('dejavusans')
mathtext用フォント
strFontconfigのパターン (単独指定)
pathlib.Pathフォントファイルの絶対パス
fontsize
size3.1
float
str
フォントサイズ
指定値備考
floatフォントサイズ (ポイント単位)
'xx-small'



標準



'x-small'
'small'
'medium'
'large'
'x-large'
'xx-large'
fontstretch
stretch3.1
数値
str
フォント拡張
指定値備考
0~1000
'ultra-condensed'
'extra-condensed'
'condensed'
'semi-condensed'
'normal'通常文字幅
'semi-expanded'
'expanded'
'extra-expanded'
'ultra-expanded'
fontstyle
style3.1
strフォントスタイル
スタイル備考
'normal'通常体
'italic'イタリック体
'oblique'斜体
fontvariant
variant3.1
str
フォントバリアント備考
'normal'標準
'small-caps'スモールキャップス (小文字サイズの大文字)
fontweight
weight3.1
数値
str
フォントの太さ
指定値備考
0~1000
'ultralight'
'light'
'normal'400
'regular'
'book'
'medium'
'roman'
'semibold'
'demibold'
'demi'
'bold'700
'heavy'
'extra bold'
'black'
gidstrグループId (識別子として利用可)
horizontalalignment
ha3.1
str水平方向の配置
指定値備考
'center'中央寄せ
'right'右寄せ
'left'左寄せ
in_layoutboolレイアウト計算に含めるか否か
labelobjectラベル
linespacingfloat
(multiple of font size)
行間隔 (フォントサイズの倍数)
math_fontfamily 3.4str'dejavusans', 'dejavuserif', 'cm', 'stix', 'stixsans' and 'custom'.
multialignment
ma3.1
str複数行のテキスト配置
指定値備考
'left'左寄せ
'right'右寄せ
'center'中央寄せ
parse_math 3.5boolmathtext解析の有無
path_effectsAbstractPathEffect
pickerNone
bool
float
callable
None:
bool:ピッカーイベント有無
float:
callable:ピッカーイベント
position(float, float)位置座標 (x, y)
rasterizedboolラスタライズ(ビットマップ) 描画強制の有無
rotationfloat
str
テキストの回転
指定値備考
float回転角度 (度単位)
(3時の位置から反時計回り)
'vertical'垂直 (90)
'horizontal'水平 (0)
rotation_modeNone
str
回転モード
指定値備考
None回転後に位置合わせ
'default'
'anchor'位置合わせ後に回転
sketch_params(scale: float, length: float, randomness: float)
snapbool
None
スナップ (ピクセル位置補正) の有無
(Agg・MacOSX バックエンドのみサポート)
textobjectテキスト
transformTransform
transform_rotates_textbool回転変換のテキスト方向影響の有無
urlstrハイパーリンクURL (SVG のみ対応)
usetexbool
None
TeX の使用有無
verticalalignment
va3.1
str垂直方向の配置
指定値備考
'center'文字の中央を座標に合わせる
'top'文字の上を座標に合わせる
'bottom'文字の下を座標に合わせる
'baseline'文字のベースラインを座標に合わせる
'center_baseline'文字のベースライン基準の中央を座標に合わせる
visiblebool表示有無
wrapboolテキストの折り返し有無
xfloatx位置
yfloaty位置
zorderfloatZオーダー (大きい方が手前)

設定・グラフパーツ

設定・グラフパーツ の抜粋〔

pyplot.axes.Axes.その他
タイトルsuptitle【タイトル設定 (全体)】
title【タイトル設定】
set_title【タイトル設定】
get_title【タイトル取得】
Axes3D.set_title【タイトル設定】
figure.Figure.suptitle【タイトル設定 (全体)】
figure.SubFigure.suptitle
凡例legend【凡例 設定】3.5 / 3.7 / 3.8
quiverkey【ベクトルの凡例 追加】
figure.Figure.legend【凡例 設定 (全体)】3.7 / 3.8
PathCollection.legend_elements【凡例項目作成】
get_legend【凡例 取得】
get_legend_handles_labels【凡例 取得 (ハンドル・ラベル)】

円グラフの基本

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] =\
    ['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
    1,
    3,
    figsize=(9, 3),
    tight_layout=True,
)

# データの合計が 1 以上
axs[0].set_title("データの合計が1以上")
data_a = [40, 30, 20, 10]
labels_a = ['Data 1', 'Data 2', 'Data 3', 'Data 4']
axs[0].pie(
    data_a,
    labels=labels_a,
)

# データの合計が1未満
axs[1].set_title("データの合計が1未満")
data_b = [0.4, 0.3, 0.2]
labels_b = ['Data 1', 'Data 2', 'Data 3']
axs[1].pie(
    data_b,
    labels=labels_b,
    normalize=False,
)

# 12時の位置から時計回り
axs[2].set_title("12時の位置から時計回り")
data_c = [40, 30, 20, 10]
labels_c = ['Data 1', 'Data 2', 'Data 3', 'Data 4']
axs[2].pie(
    data_c,
    labels=labels_c,
    startangle=90,
    counterclock=False,
)

# グラフ表示
plt.show()

ラベル

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
    ['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
    3,
    3,
    figsize=(10, 9),
    tight_layout=True,
)

# データ
data = [40, 30, 20, 10]
labels = ['Data 1', 'Data 2', 'Data 3', 'Data 4']

# 数値ラベル (1)
axs[0, 0].set_title('数値ラベル (autopct=フォーマット文字列)')
axs[0, 0].pie(
    data,
    startangle=90,
    counterclock=False,
    autopct='%d',
)

# 数値ラベル (2)
def myFunc(value):
    label = f'({value:.1f})'
    return label

axs[0, 1].set_title('数値ラベル (autopct=関数)')
axs[0, 1].pie(
    data,
    startangle=90,
    counterclock=False,
    autopct=myFunc,
)

# 数値ラベル (3)
axs[0, 2].set_title('数値ラベル (pctdistance=1.2)')
axs[0, 2].pie(
    data,
    startangle=90,
    counterclock=False,
    autopct='%d',
    pctdistance=1.2,
)

# 要素ラベル (1)
axs[1, 0].set_title('要素ラベル')
axs[1, 0].pie(
    data,
    startangle=90,
    counterclock=False,
    labels=labels,
)

# 要素ラベル (2)
axs[1, 1].set_title('要素ラベル (labeldistance=0.5)')
axs[1, 1].pie(
    data,
    startangle=90,
    counterclock=False,
    labels=labels,
    labeldistance=0.5,
)

# 要素ラベル (3)
axs[1, 2].set_title('要素ラベル (rotatelabels =True)')
axs[1, 2].pie(
    data,
    startangle=90,
    counterclock=False,
    labels=labels,
    radius=0.8,
    rotatelabels =True,
)

# 数値ラベル+要素ラベル
axs[2, 0].set_title('数値ラベル+要素ラベル')
axs[2, 0].pie(
    data,
    startangle=90,
    counterclock=False,
    autopct='%d',
    labels=labels,
)

# 表示
plt.delaxes(axs[2, 1])
plt.delaxes(axs[2, 2])
plt.show()

修飾

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
    ['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
    2, 3,
    figsize=(9, 6),
    tight_layout=True,
)

# データ
data = [40, 30, 20, 10]
labels = ['Data 1', 'Data 2', 'Data 3', 'Data 4']

# 円グラフ (0, 0)
axs[0, 0].set_title('くさび形部分')
axs[0, 0].pie(
    data,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'linewidth' : 2,
        'edgecolor': 'lightblue',
    },
    colors=['red', 'green', 'blue', 'yellow'],
)

# 円グラフ (0, 1)
axs[0, 1].set_title('影・外枠の色・テキスト部分')
axs[0, 1].pie(
    data,
    labels=labels,
    startangle=90,
    counterclock=False,
    autopct='%d',
    shadow=True,
    wedgeprops={
        'linewidth' : 2,
        'edgecolor': 'white',
    },
    textprops={
        'color': 'blue',
        'fontsize': 12,
        'fontweight': 'bold',
    },
)

# 円グラフ (0, 2)
axs[0, 2].set_title('影・強調')
patches, texts, autotexts = axs[0, 2].pie(
    data,
    labels=labels,
    startangle=90,
    counterclock=False,
    autopct='%d',
    shadow={'color': 'blue', 'ox': -0.05, 'oy': -0.05},  # [3.8]
    explode=[0, 0.2, 0, 0.2],
)
texts[1].set_fontsize(20)
texts[1].set_color("red")
autotexts[1].set_fontsize(20)
autotexts[1].set_color("white")

# 円グラフ (1, 0)
axs[1, 0].set_title('ハッチング (wedgeprops 指定)')
axs[1, 0].pie(
    data,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'edgecolor': 'lightblue',
        'hatch': 'xx|',
    },
)

# 円グラフ (1, 1)
axs[1, 1].set_title('ハッチング (hatch 単一指定)')
axs[1, 1].pie(
    data,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'edgecolor': 'lightblue',
    },
    hatch='*',
)

# 円グラフ (1, 2)
axs[1, 2].set_title('ハッチング (hatch リスト指定)')
axs[1, 2].pie(
    data,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'edgecolor': 'lightblue',
    },
    hatch=['o', '.O', 'XX|'],
)

# 表示
plt.show()

ドーナツチャート

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
fig, axs = plt.subplots(
    1,
    3,
    figsize=(9, 3),
    tight_layout=True,
)

# ドーナツ (1)
data = [40, 30, 20, 10]
axs[0].pie(
    data,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'width': 0.5,
        'edgecolor': 'white',
    }
)

# ドーナツ (2)
data_a = [40, 30, 20, 10]
data_b = [
    20, 20,
    20, 10,
    10, 10,
    5, 5
]
width = 0.4
axs[1].pie(
    data_a,
    startangle=90,
    counterclock=False,
    wedgeprops={
        'width': width,
        'edgecolor': 'white',
    }
)
axs[1].pie(
    data_b,
    startangle=90,
    counterclock=False,
    radius=1 - width,
    wedgeprops={
        'width': width,
        'edgecolor': 'white',
    }
)

# ドーナツ (3)
color_a = plt.get_cmap("Reds")
color_b = plt.get_cmap("Greens")
color_c = plt.get_cmap("Blues")
color_d = plt.get_cmap("Purples")
color_outer = [color_a(0.7), color_b(0.7), color_c(0.7), color_d(0.7)]
color_inner = [
    color_a(0.6), color_a(0.5),
    color_b(0.6), color_b(0.5),
    color_c(0.6), color_c(0.5),
    color_d(0.6), color_d(0.5),
]
labels = ['Data 1', 'Data 2', 'Data 3', 'Data 4']
axs[2].pie(
    data_a,
    startangle=90,
    counterclock=False,
    autopct='%d',
    pctdistance =0.8,
    labels=labels,
    wedgeprops={
        'width': width,
        'edgecolor': 'white',
    },
    colors=color_outer,
)
axs[2].pie(
    data_b,
    startangle=90,
    counterclock=False,
    radius=1 - width,
    autopct='%d',
    pctdistance =0.8,
    wedgeprops={
        'width': width,
        'edgecolor': 'white',
    },
    colors=color_inner,
)

# 表示
plt.show()

データの指定方法

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
    ['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
    1, 2,
    figsize=(8, 4),
    tight_layout=True,
)
x = [40, 30, 20, 10]
labels = ['Data 1', 'Data 2', 'Data 3', 'Data 4']
explode = (0, 0.1, 0, 0)
colors = ['red', 'green', 'lightblue', 'cyan']
colors = ['C0', 'C2', 'C4', 'C6']

# グラフ (通常指定)
axs[0].set_title('通常指定')
axs[0].pie(
    x=x,
    explode=explode,
    labels=labels,
    colors=colors,
    autopct='%d %%',
    startangle=90,
    counterclock=False,
    textprops={'fontsize': 12},
)

# グラフ (data指定)
axs[1].set_title('data指定')
axs[1].pie(
    x='tag-x',
    explode='tag-explode',
    labels='tag-labels',
    colors='tag-colors',
    autopct='%d %%',
    startangle=90,
    counterclock=False,
    textprops={'fontsize': 12},
    data={
        'tag-x': x,
        'tag-explode': explode,
        'tag-labels': labels,
        'tag-colors': colors,
    },
)

# グラフ表示
plt.show()

設定・グラフパーツ

pieのサンプル画像

import matplotlib.pyplot as plt

# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
    ['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
    1,
    2,
    figsize=(8, 3),
    tight_layout=True,
)
plt.suptitle('suptitle【タイトル設定 (全体)】')

# データ
data = [40, 30, 20, 10]
labels = ['Data 1', 'Data 2', 'Data 3', 'Data 4']

# グラフ (左)
axs[0].set_title('set_title【タイトル設定】')
axs[0].pie(
    data,
    labels=labels,
    startangle=90,
    counterclock=False,
    autopct='%d',
)
axs[0].legend(
    title='凡例',
    bbox_to_anchor=(1, 0, 0.6, 1),
)

# グラフ (右)
axs[1].set_title('set_title【タイトル設定】')
axs[1].pie(
    data,
    labels=labels,
    startangle=90,
    counterclock=False,
    autopct='%2.1f %%',
    wedgeprops={
        'linewidth': 2,
        'edgecolor': 'white',
    },
)

# 表示
plt.show()