ぷそさんのプログラミング研究所

【Python】matplotlibでおしゃれグラフの作り方|円グラフ

プレゼンで使うグラフはおしゃれにしたい時もあると思います。

グラフの作成方法はパワポや画像編集ソフトなどがあると思いますが,今回はmatplotlibでおしゃれグラフを作る方法をご紹介します!

目次

Pythonでおしゃれな円グラフを作る

この記事では,以下のような円グラフの作り方をご紹介します。

中心にアイコンを配置した円グラフ
割合を中心に表示した円グラフ

中心にアイコンを配置した円グラフ

まず,中心にアイコンを配置した円グラフの作り方をご紹介します。

必要なものは以下になります。

  • 表示するデータ
  • アイコン画像
  • matplotlib

作り方(ソースコード全文)

下のコードをコピペして実行してもらうと,上で紹介した画像が出力されます。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
plt.rcParams['font.family'] = 'Helavetica' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 10
# データの読み込み
x = np.array([40, 25, 10, 25])
label = ["40%", "25%", "10%", "25%"]
# 真ん中のアイコンの読み込み
icon = plt.imread("icon.png")
# グラフの定義
fig = plt.figure(figsize=(5, 5),dpi=400)
ax = fig.add_subplot(1,1,1)
# 円グラフのプロット
colors = ["#00215d", "#00468d", "#589fef", "#dddddf"]
ax.pie(x, 
       counterclock=False, 
       startangle=90, 
       wedgeprops=dict(width=0.5),
       colors=colors, 
       pctdistance=0.75,
       autopct='%d%%',
       textprops={'color': "white", 'weight': "bold"})
# 図形の挿入
img_box = OffsetImage(icon, zoom=0.15)
img_icon = AnnotationBbox(img_box, (0, 0),
                          frameon=False)
ax.add_artist(img_icon)
fig.savefig("pie1.png", format="png", dpi=400)
fig.show()

以下で,詳しいコードの説明をします。

コード解説

モジュールのインポート

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

画像の挿入を行うため,matplotlib内のOffsetImageAnnotationBboxをインポートしています。

グラフの設定(フォントなど)

# グラフの設定
plt.rcParams['font.family'] = 'Helavetica' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 10

グラフ内のフォントの設定をしています。

どのフォントを使っても良いですが,グラフでよく使われるHelaveticaとしています。

plt.rcParams["font.size"]については,お好みで設定してください!

データの読み込み

x = np.array([40, 25, 10, 25])

# 真ん中のアイコンの読み込み
icon = plt.imread("icon.png")
1行目:x =

円グラフなので,割合をそれぞれ指定しています。

4行目:icon =

真ん中に表示するアイコンを読み込みます。

背景が白の画像でないと背景色が映り込みます。

グラフの定義

# グラフの定義
fig = plt.figure(figsize=(5, 5),dpi=400)
ax = fig.add_subplot(1,1,1)

オブジェクト指向で定義しています。

plt.という書き方でも大丈夫です。

円グラフのプロット

まずは,円グラフのプロットを行います。

# 円グラフのプロット
colors = ["#00215d", "#00468d", "#589fef", "#dddddf"]
ax.pie(x, 
       counterclock=False, 
       startangle=90, 
       wedgeprops=dict(width=0.5),
       colors=colors, 
       pctdistance=0.75,
       autopct='%d%%',
       textprops={'color': "white", 'weight': "bold"})
2行目:colors =

円グラフの色を指定しています。

4個のデータがあるので,大きい順に1つずつ指定します。

3行目:ax.pie(

データを円グラフにプロットします。

オプションについては以下のようになっております。

オプション名内容設定例
counterclock要素の順番の指定Falseでそのまま。
Trueにすると逆順になる。
startangle円グラフのスタート位置の指定真上から始める場合は90
wedgepropsドーナツの太さの指定値が大きくなるにつれて太くなる。
colors要素の色の指定指定しない場合は自動設定。
pctdistance凡例の位置の指定「割合の凡例」の中心からの位置を指定する。
autopct割合の表記の指定整数値の場合は‘%d%%’
textprops凡例の文字の指定色とフォントの太さを設定できる。

図形の挿入

真ん中に表示する画像を挿入します。

# 図形の挿入
img_box = OffsetImage(icon, zoom=0.15)
img_icon = AnnotationBbox(img_box, 
                          (0, 0),
                          frameon=False)

ax.add_artist(img_icon)
2行目:img_box =

OffsetImageを設定します。

zoomの値は図形の大きさです。表示したい大きさに応じて変更してください。

3行目:img_icon =

画像挿入の方法を設定しています。

(0, 0)は図形の座標を設定しています。中心が(0, 0)です。

frameon=Falseは図形の枠線の有無を設定しています。

7行目:ax.add_artist

グラフに画像を挿入しています。

グラフの保存

出来上がったグラフを保存します。

fig.savefig("pie1.png", format="png", dpi=400)
fig.show()

割合を中心に表示した円グラフ

次に,割合を中心に表示した円グラフの作り方をご紹介します。

必要なものは以下になります。

  • 表示するデータ
  • matplotlib

作り方(ソースコード全文)

下のコードをコピペして実行してもらうと,上で紹介した画像が出力されます。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'Helavetica' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 10
x = np.array([82, 18])
# グラフの定義
fig = plt.figure(figsize=(10, 5),dpi=400)
ax = fig.add_subplot(1,1,1)
# 円グラフのプロット
colors = ["#7ab8b6", "#dddddf"]
ax.pie(x, 
       counterclock=False, 
       startangle=90, 
       wedgeprops=dict(width=0.1),
       colors=colors, 
      )
# テキスト挿入
font_dict1 = dict(family="Tamil Sangam MN",
                  color="#7ab8b6",
                  weight="bold",
                  size=80)
X1 = -0.58
Y1 = -0.22
text1 = "82"
ax.text(X1, Y1, text1, fontdict=font_dict1)
font_dict2 = dict(family="Tamil Sangam MN",
                  color="#7ab8b6",
                  weight="bold",
                  size=30)
X2 = 0.3
Y2 = -0.22
text2 = "%"
ax.text(X2, Y2, text2, fontdict=font_dict2)
fig.savefig("pie2.png", format="png", dpi=400)
fig.show()

以下で,詳しいコードの説明をします。

コード解説

モジュールのインポート

import matplotlib.pyplot as plt
import numpy as np

グラフの設定(フォントなど)

# グラフの設定
plt.rcParams['font.family'] = 'Helavetica' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 10

グラフ内のフォントの設定をしています。

どのフォントを使っても良いですが,グラフでよく使われるHelaveticaとしています。

plt.rcParams["font.size"]については,お好みで設定してください!

データの入力

x = np.array([82, 18])

このグラフは2個のデータで構成されるので,足して100になるデータを入力してください。

グラフの定義

# グラフの定義
fig = plt.figure(figsize=(5, 5),dpi=400)
ax = fig.add_subplot(1,1,1)

オブジェクト指向で定義しています。

plt.という書き方でも大丈夫です。

円グラフのプロット

# 円グラフのプロット
colors = ["#7ab8b6", "#dddddf"]
ax.pie(x, 
       counterclock=False, 
       startangle=90, 
       wedgeprops=dict(width=0.1),
       colors=colors, 
      )
2行目:colors =

円グラフの色を設定しています。

図のようなおしゃれなグラフでは,「有彩色」と「グレー」の組み合わせがよく使われています!

3行目:ax.pie(

データを円グラフにプロットします。

オプションについては以下のようになっております。

オプション名内容設定例
counterclock要素の順番の指定Falseでそのまま。
Trueにすると逆順になる。
startangle円グラフのスタート位置の指定真上から始める場合は90
wedgepropsドーナツの太さの指定値が大きくなるにつれて太くなる。
colors要素の色の指定指定しない場合は自動設定。

割合(%)のテキスト挿入

このグラフの肝である「n%」の部分の設定です。

# テキスト挿入
font_dict1 = dict(family="Tamil Sangam MN",
                  color="#7ab8b6",
                  weight="bold",
                  size=80)
X1 = -0.58
Y1 = -0.22
text1 = "82"

ax.text(X1, Y1, text1, fontdict=font_dict1)

font_dict2 = dict(family="Tamil Sangam MN",
                  color="#7ab8b6",
                  weight="bold",
                  size=30)
X2 = 0.3
Y2 = -0.22
text2 = "%"

ax.text(X2, Y2, text2, fontdict=font_dict2)

数字と「%」の文字の大きさを変えるために,font_dict1font_dict2を用意して挿入しています。

文字の挿入は,ax.text(X座標, Y座標, テキスト, オプション)を設定します。

座標に関しては,中心が(0,0)となっているので,少しずつずらして調整します。

グラフの保存

出来上がったグラフを保存します。

fig.savefig("pie2.png", format="png", dpi=400)
fig.show()
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログでは,PythonやLaTeXの使い方などを紹介しています!
仕事でも趣味でもプログラミングをしています。
ブログは2022年8月にスタートしました。
【経歴】東京大学大学院修了→大手IT企業勤務

コメント

コメントする

目次