PythonのMatplotlibにおける棒グラフ/積み上げ棒グラフの作成方法を初心者向けに解説した記事です。通常の棒グラフだけではなく、CSVファイルからデータを取得しての棒グラフの描き方や、積み上げ棒グラフの描き方などを解説しています。
またグラフの装飾方法については、タイトル、ラベル、目盛線、凡例、色などの使い方を解説していきます。
Matplotlibについて、もし動画教材で体系的に学ばれたい方は、以下の割引クーポンをご利用ください。クリックすると自動的に適用されます。期間限定になりますのでお早めに。
>> 「Pythonによるビジネスに役立つデータ分析・可視化入門」(Udemyへのリンク)
Matplotlibで棒グラフの描画と装飾(タイトル、ラベル、目盛線、凡例、色)
次はMatplotlibで棒グラフの描画にチャレンジします。
製品毎の売り上げを示す棒グラフを描画していきましょう。
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)売上の格納
# グラフの装飾
plt.title("Sales by Product (m$)",
fontsize = 22) # (3)タイトル
plt.xlabel("Product", fontsize = 22) # (4)x軸ラベル
plt.ylabel("Sales", fontsize = 22) # (5)y軸ラベル
plt.grid(True) # (6)目盛線表示
plt.tick_params(labelsize=14) # (7)目盛線ラベルサイズ
# グラフ描画
plt.bar(product_nm, sales, tick_label=product_nm,
align="center", color = "c") # (8)棒グラフ描画
plt.show()
それではプログラムを説明していきます。
import matplotlib.pyplot as plt
まず最初に必要なライブラリをimport文で読み込んでいます。NumPyを利用する為にnumpyをインポートします。その際に別名「np」を付けることにより、以降のプログラムでは「numpy」と記述しなくても「np」と記述することでNumPyを使うことができるようになります。また同様にMatplotlibを利用する為に、matplotlib.pyplotクラスをインポートし、別名として「plt」を付けています。
"TV", "Washers"]) # (1)製品名の格納
(1)では、製品名が入っているndarray型のデータを変数product_nmに格納しています。
(2)では、製品毎の売上が入っているndarray型のデータを変数salesに格納しています。
(3)では、titleでタイトル「Sales by Product (m$)」を表示しています。また引数fontsizeでは、タイトルのフォントサイズを指定しています。
plt.ylabel("Sales", fontsize = 22) # (5)y軸ラベル
(4)では、xlabelでx軸ラベル「Product」を表示しています。またtitleと同様に、引数fontsizeでは、x軸ラベルのフォントサイズを指定しています。(5)も同様に、ylabelを使いy軸ラベル「Sales」を表示しています。
(6)では、gridの引数でTrueを指定することにより、目盛線を表示しています。Falseを指定したり、gridを記述しなければ、目盛線は表示されません。
(7)では、目盛線のラベルのフォントサイズを指定しています。
align="center", color = "c") # (8)棒グラフ描画
最後に(8)で、barに変数product_nm、salesを渡すことで棒グラフを描画しています。引数tick_labelに対して変数product_nmを渡すことで、製品名をx軸のラベルとして表示しています。また引数alignでは、棒の表示位置を指定でき、edge(左端)または center(中央)を指定することができます。何も指定しなければ、edge(左端)になります。
棒グラフの色の変更
align="center", color = "c") # (8)棒グラフ描画
棒グラフの色の変更は、(10)のplt.bar(product_nm, sales, tick_label=product_nm, align="center", color = "c")
の引数colorを変えることで実現できます。
引数colorで指定できる主な色は以下です。
記号 | 色 |
b | 青 |
k | 黒 |
r | 赤 |
g | 緑 |
y | 黄 |
w | 白 |
c | シアン |
m | マゼンダ |
色はcolor = (0.0, 0.0, 1.0)のように、RGB それぞれのを色の要素を 0.0 ~ 1.0 のタプルで指定することも可能です。
例)棒グラフの色を赤に指定: color="r"
例)棒グラフの色を緑に指定: color="g"
例)棒グラフの色をマゼンダに指定: color="m"
例)棒グラフの色をRGBで指定: c=(0.3, 0.2, 0.8)
発売数10,000本突破記念で、期間限定で88%オフの大セール中!!!
CSVファイル読み込み、Matplotlibで棒グラフの描画
先ほどは、NumPyのarrayに直接、製品毎の売上データを入力していましたが、今回はCSVファイルからこれらのデータを読み込み、棒グラフを表示してみます。
ここでは製品毎の売上を格納したCSVファイル「electric_appliances_sales.csv」(※csvファイルは上のリンクより取得下さい。)をデータ処理に特化したライブラリ「Pandas」を使って読み込んでいきます。
Pandasの詳細については、このリンク「Pandasでデータ分析(インストールから使い方まで)」が参考になります。
それではプログラムを解説していきます。まずはmatplotlib.pyplotとpandasをインポートします。
import matplotlib.pyplot as plt
import pandas as pd
次にread_csvでファイル「electric_appliances_sales.csv」を読み込み、df_salesにデータを格納します。
df_salesの内容を表示してみると、以下のように製品毎の売上の情報が表示されます。
またdf_sales中で、製品名が格納されているProduct列の情報だけ表示してみます。
次にdf_sales中で、売上が入っているsales列の内容のみを表示してみます。
これらの製品名 df_sales["Product"] と、売上 df_sales["sales"] のデータを使って、棒グラフを表示してみます。前回の例と異なるのは、赤マーカーの箇所になります。ここでは棒グラフを描画するbarの引数に、製品名 df_sales["Product"]と、売上 df_sales["sales"]を渡しています。
plt.title("Sales by Product (m$)", fontsize = 22) # (3)タイトル
plt.xlabel("Product", fontsize = 22) # (4)x軸ラベル
plt.ylabel("Sales", fontsize = 22) # (5)y軸ラベル
plt.grid(True) # (6)目盛線表示
plt.tick_params(labelsize=14) # (7)目盛線ラベルサイズ
# グラフ描画
plt.bar(df_sales["Product"], df_sales["Sales"], tick_label=df_sales["Product"],
align="center", color = "c") # (8)棒グラフ描画
plt.show()
Matplotlibで積み上げ棒グラフの描画と装飾(タイトル、ラベル、目盛線、凡例、色)
次に先ほどの棒グラフをアレンジし、Matplotlibで積み上げ棒グラフを表示しましょう。
製品毎の売上のデータを上期(First Half)、下期(Second Half)の2つに分割し、積み上げて表示していきます。
import numpy as np
import matplotlib.pyplot as plt
# データ準備
product_nm = np.array(["Cooktops", "Dryers", "Ranges",
"TV", "Washers"]) # 製品名
sales1 = np.array([40, 30, 30, 33, 2]) # (1)First Half
sales2 = np.array([84, 30, 40, 100, 10]) # (2)Second Half
# グラフの装飾
plt.title("Sales by Product (m$)",
fontsize = 22) # タイトル
plt.xlabel("Product", fontsize = 22) # x軸ラベル
plt.ylabel("Sales", fontsize = 22) # y軸ラベル
plt.grid(True) # 目盛線表示
plt.tick_params(labelsize=14) # 目盛線ラベルサイズ
# グラフ描画
plt.bar(product_nm, sales1,
tick_label = product_nm, align="center",
label="First Half", color = "c") # (3)First Half描画
plt.bar(product_nm, sales2, bottom = sales1,
tick_label = product_nm, align="center",
label="Second Half", color = "b") # (4)Second Half描画
plt.legend(loc="upper right", fontsize=10) # (5)凡例表示
plt.show()
それではプログラムを解説していきましょう。
sales2 = np.array([84, 30, 40, 100, 10]) # (2)Second Half
(1)(2)では、製品毎の売上が入っているndarray型のデータを変数salesに格納しています。上期(First Half)の売上を変数sales1に、下期(Second Half)の売上を変数sales2に格納しています。
tick_label = product_nm, align="center",
label="First Half", color = "c") # (3)First Half描画
plt.bar(product_nm, sales2, bottom = sales1,
tick_label = product_nm, align="center",
label="Second Half", color = "b") # (4)Second Half描画
(3)で、barに変数product_nm、sales1を渡すことで上期(First Half)分の棒グラフを描き、(4)で、barに変数product_nm、sales2を渡すことで下期(Second Half)分の棒グラフを描画しています。
この時に、barの引数bottomではグラフの開始位置(底)を指定します。ここでは、上期(First Half)の値sales1を指定することで、下期(Second Half)のグラフの開始は、上期(First Half)を描いた上から積み上げて描くことになります。
3つ以上の棒グラフを積み上げていく場合も、同じ方法で積み上げていくことができます。例えば、sales1、sales2、sales3とあり、それぞれ順に積み上げて表示する場合、sales3では、bottom = sales1 + sales2 と指定します。
(5)では、legendで凡例を表示しています。その時に表示されるラベルは(3)、(4)でlabelとして指定したものになります。引数fontsizeでラベルの文字サイズを指定します。また引数locでは凡例の表示位置を指定しており、次の位置を指定できます。
表示位置 | locの指定内容 |
右上 | upper right |
右下 | lower right |
左上 | upper left |
左下 | lower left |
発売数10,000本突破記念で、期間限定で88%オフの大セール中!!!
Matplotlibの日本語対応
Matplotlibでは、標準では日本語対応がされておらず、棒グラフなどのグラフのタイトルやラベルは英語でしか表記できません。日本語を無理に表示しようとすると、文字化けが発生し、「□□□」のような文字が表示されるだけで、正しく表示できません。
以下の記事では、Python初心者でも簡単にできる日本語対応の仕方を解説していきます。
Matplotlibで複数のグラフを並べて描画(棒グラフ、散布図、折れ線グラフ、円グラフなど)
複数の棒グラフ、積み上げ棒グラフを比較できるよう並べて表示したり、また棒グラフと折れ線グラフや円グラフなど他のグラフと並べて表示する方法は、以下のリンクをご参照ください。
関連記事です。
円グラフの描き方については、こちらが参考になります。
散布図についても確認しましょう。
折れ線グラフの描き方については、こちらをご覧ください。