17. Matplotlibでグラフの描画

Matplotlibで円グラフの描画と装飾(タイトル、ラベル、凡例、色、フォントサイズ、CSVからの表示)

更新日:

PythonのMatplotlibにおける円グラフの作成方法を初心者向けに解説した記事です。通常の円グラフだけではなく、CSVファイルからデータを取得しての円グラフの描き方などを解説しています。

またグラフの装飾方法については、タイトル、ラベル、フォントサイズ、色、凡例などの使い方を解説していきます。

Matplotlibで円グラフの描画と装飾(タイトル、ラベル、フォントサイズ、色、凡例)

次に各製品の売上が、全体に対して、それぞれどのくらいの比率、シェアを占めているのかをMatplotlibで作成した円グラフで確認していきましょう。

In [1]: 
import numpy as np
import matplotlib.pyplot as plt
 
# データ準備
product_nm = np.array(["Cooktops", "Dryers", "Ranges",
                      "TV", "Washers"]) # (1)製品名の格納
sales = np.array([124, 60, 70, 133, 12]) # (2)売上の格納
pie_colors = ["r", "c", "b", "m", "y"] # (3)製品毎の色指定
 
# グラフの装飾
plt.title("Sales by Product",
                      fontsize = 22) # (4)タイトル
plt.rcParams['font.size'] = 16.0 # (5)ラベルのフォントサイズ
 
# グラフの描画
plt.pie(sales, labels=product_nm, counterclock=True,
                 autopct="%1.1f%%", colors=pie_colors) # (6)円グラフの描画
plt.show()

 

Out:

 

それではプログラムの説明に入ります。

import numpy as np
import matplotlib.pyplot as plt

まず最初に必要なライブラリをimport文で読み込んでいます。NumPyを利用する為にnumpyをインポートします。その際に別名「np」を付けることにより、以降のプログラムでは「numpy」と記述しなくても「np」と記述することでNumPyを使うことができるようになります。また同様にMatplotlibを利用する為に、matplotlib.pyplotクラスをインポートし、別名として「plt」を付けています。
 

product_nm = np.array(["Cooktops", "Dryers", "Ranges",
                      "TV", "Washers"]) # (1)製品名の格納

(1)では、製品名が入っているndarray型のデータを変数product_nmに格納しています。
 

sales = np.array([124, 60, 70, 133, 12]) # (2)売上の格納

(2)では、売上が入っているndarray型のデータを変数salesに格納しています。
 

pie_colors = ["r", "c", "b", "m", "y"] # (3)製品毎の色指定

(3)では、製品毎の色を変数pie_colorsに設定しています。この変数を(3)のpieの引数colorsに対して渡すことで、円グラフの構成要素毎の色を指定しています。
 
pieの引数colorsで指定できる主な色は以下です。

記号
b
k
r
g
y
w
cシアン
mマゼンダ

色はcolor = (0.0, 0.0, 1.0)のように、RGB それぞれのを色の要素を 0.0 ~ 1.0 のタプルで指定することも可能です。
 

plt.title("Sales by Product", fontsize = 22) # (4)タイトル

(4)では、titleでタイトル「Sales by Product」を表示しています。また引数fontsizeでは、タイトルのフォントサイズを指定しています。
 

plt.rcParams['font.size'] = 16.0 # (5)ラベルのフォントサイズ

(5)では、円グラフのラベルである製品名や構成比(%)のフォントサイズを指定しています。
 

plt.pie(sales, labels=product_nm, counterclock=True,
                 autopct="%1.1f%%", colors=pie_colors) # (6)円グラフの描画

(6)では、pieに変数product_nm、salesを渡して円グラフを描画しています。引数counterclockでは、True に設定すると時計回りでデータを表示し、False に設定すると反時計回りで表示します。ここでは反時計回りでCooktops、Dryers…と表示してみました。
 
また引数autopctで構成比を小数点以下第一位まで表示するよう指定しています。

 
 

凡例の表示

先ほどの例では、円グラフの該当する製品の箇所のすぐ横に製品名を表示し、凡例は表示しませんでした。それでは、凡例を表示する場合は、どのようにすれば良いのでしょうか。
 

plt.pie(sales, labels=product_nm, counterclock=True,
                 autopct="%1.1f%%", colors=pie_colors) # (6)円グラフの描画

凡例を表示する場合、上記の処理を以下のように変更します。

plt.pie(sales, counterclock=True,
                 autopct="%1.1f%%", colors=pie_colors) # (6)円グラフの描画
plt.legend(product_nm, fontsize=12,
                 bbox_to_anchor=(0.9, 0.7)) # (7)凡例の表示

 
表示結果は次のように変わります。

Out:

 
それではプログラムを解説していきます。

plt.pie(sales, counterclock=True,
                 autopct="%1.1f%%", colors=pie_colors) # (6)円グラフの描画

まずは、(6)のpieに対する引数labelsを削除し、製品名の表示を消します。
 

plt.legend(product_nm, fontsize=12,
                 bbox_to_anchor=(0.9, 0.7)) # (7)凡例の表示

次に(7)のlegendを追加し、凡例を表示します。凡例の名称は、変数product_nmに格納されているものを使います。引数fontsizeではラベルの文字サイズを指定します。
 
また引数bbox_to_anchorでは凡例の表示位置を指定できます。bbox_to_anchor=(0.9, 0.7)では、最初の数値0.9が左端からの横の位置を示しており、次の数値0.7では、一番下からの高さを示しています。それぞれ0~1の範囲で位置を指定します。

 
 

CSVファイルを読み込み、Matplotlibで円グラフの描画

前の例では、NumPyのarrayに対して、製品毎の売上データを手入力していました。しかし今度は、CSVファイルから売上のデータを読み込んで、円グラフを表示してみましょう。
 
ここでは製品毎の売上を格納したCSVファイル「electric_appliances_sales.csv」(※csvファイルは上のリンクより取得下さい。)をデータ処理に特化したライブラリ「Pandas」を使って読み込んでいきます。
 
Pandasの説明は、このリンク「Pandasでデータ分析(インストールから使い方まで)」をご確認ください。


またPandasを使ってのCSVファイルを読み込む方法については、このリンク「Pandas Excel、CSVファイルの読み込み、書き込み(出力)」をご参照ください。

 
それではプログラムの説明に入ります。最初に必要なライブラリmatplotlib.pyplot、pandasをインポートします。

In [2]:
import matplotlib.pyplot as plt
import pandas as pd

 
 
そして、read_csvを使ってCSVファイル「electric_appliances_sales.csv」を読み込み、df_salesにデータを格納します。

In [3]: df_sales=pd.read_csv("electric_appliances_sales.csv")

 
 
今読み込んだdf_salesの内容を表示してみましょう。すると製品毎の売上が表示されました。

In [4]: df_sales
Out[4]:

 
 
次にdf_salesから製品名が入っているProduct列に絞って情報を表示します。

In [5]: df_sales["Product"]
Out[5]:

 
 
またdf_salesから売上が入っているsales列のみを表示してみましょう。

In [6]: df_sales["sales"]
Out[6]:

 
 
このようにして取得した製品名 df_sales["Product"] と、売上 df_sales["sales"] のデータを使い、円グラフを表示していきます。赤マーカーの箇所が、今回変更した箇所になります。ここでは円グラフを描画するpieの引数に、製品名 df_sales["Product"]と、売上 df_sales["sales"]を渡しています。

In [7]:
# データ準備
pie_colors = ["r", "c", "b", "m", "y"] # (1)製品毎の色指定
 
# グラフの装飾
plt.title("Sales by Product",
             fontsize = 22) # タイトル
plt.rcParams['font.size'] = 16.0 # (2)ラベルのフォントサイズ
 
# グラフの描画
plt.pie(df_sales["Sales"], labels=df_sales["Product"], counterclock=True,
             autopct="%1.1f%%", colors=pie_colors) # (3)円グラフの描画
plt.show()
Out:

 
 

Matplotlibで複数のグラフを並べて描画(円グラフ、散布図、折れ線グラフ、棒グラフなど)

複数の円グラフを比較できるよう並べて表示したり、また円グラフと折れ線グラフや棒グラフなど他のグラフと並べて表示する方法は、以下のリンクをご参照ください。


 
 
 
著書の紹介です。

 
 

関連記事です。
散布図の描き方については、こちらをご覧ください。


 
折れ線グラフについても確認しましょう。

 
棒グラフ、積み上げ棒グラフの描き方については、こちらが参考になります。

 

-17. Matplotlibでグラフの描画

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.