( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】一瞬で書けるグラフ作成|matplotlib

Pythonでグラフを作成する

今回はPythonにおけるグラフ作成をご紹介します。

Pythonでは様々なグラフ作成ライブラリが存在していますが、最も利用されているmatplotlibについて説明します

ただし、このmatplotlibはかなり長いコードになってしまう欠点があります(細かく調整できるのは利点)

そこで初心者向けに今回は1行で書けるグラフ作成の方法をご紹介します

事前準備

Pandas」というデータ解析を実施できるライブラリをインポートします

またmatplotlibのインストールも行いましょう(日本語版も合わせて)

import pandas as pd 
!pip install japanize-matplotlib
import japanize_matplotlib
%matplotlib inline

※サンプルデータ:東京都の気温

気温のイメージ
# 本サイトから直接取得する
df = pd.read_html('https://smart-hint.com/tokyo-temperature/')[0].set_index('日付')
df.head()
Pythonで取得できる気温データ

グラフの作成方法のコツ

matplotlibのグラフを作成する前に、データの事前処理(前処理)を行うことがあります

事前処理なしの場合

まず「事前処理なし」のケースは、時系列のplot折れ線グラフplot.histヒストグラムなどで、全てのデータを利用して可視化することが多いです

Python/matplotlibの事前処理なしのグラフ可視化イメージ

事前処理ありの場合

一方で「事前処理あり」のケースはplot.bar棒グラフplot.pie円グラフなどで、データ全てではなく集約(平均や合計)したものを可視化することが多いです

Python/matplotlibの事前処理ありの可視化のイメージ

グラフの軸をインデックスに

plotの主要なグラフはインデックスが軸になることが多いため、事前に設定しましょう

※サンプルデータでは日付をインデックスに指定しています

「事前処理あり」でpivot_tableを使う場合は、indexに指定するカラムがグラフの軸になります

【Python】Pythonピボットテーブルを完全攻略|pivot_table

可視化の方法

基本的にはplotDataFrameの変数の最後に記載することでグラフを作成していきます

またデータの種類はplotの後ろに.ピリオドに続けてグラフの種類を記述します

必要なデータを揃えるために、事前にデータを加工しています

それではさっそくグラフを作成していきましょう

グラフの可視化

おすすめ度を判定:★★★=必須|★★☆=推奨|★☆☆=任意

★★★:折れ線グラフ(plot)

データに続けてplotを付けるだけで簡単に折れ線グラフを作成することができます

基本的にはindexがx軸となります

df['平均気温'].plot()
Python/matplotlibの折れ線グラフ
平均気温のテーブル

複数項目も同様にプロットすることができます

df[['平均気温','最高気温','最低気温']].plot()
Python/matplotlibの複数項目の折れ線グラフ
気温データのテーブル

★★★:棒グラフ(plot.bar)

plot.barを使うことで棒グラフを作成することができます

「最高気温・平均気温・最低気温」の平均meanで抽出したものに対して、棒グラフで可視化します

df[['平均気温','最高気温','最低気温']].mean().plot.bar()
Python/matplotlibの棒グラフ
気温データ

またpivot_tableを使った集計もplot.barで棒グラフにすることができます

「月」というカラムがあるので、平均気温を集計し可視化します

df_graphの変数に集計結果を代入し、それを可視化します(変数名は何でもOK)

df_graph = df.pivot_table(index='月', values='平均気温')
df_graph.plot.bar()
Python/matplotlibの棒グラフ
月ごとの平均気温のイメージ

こちらも同様に複数項目を可視化することもできます

df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.bar()
Python/matplotlibの複数項目の棒グラフ

複数項目を別々に可視化するのではなく、積み上げ棒グラフとしてプロットすることができます

パラメータのstackedを「True」で設定しましょう

df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.bar(stacked=True)
Python/matplotlibの複数項目の積み上げグラフ

★★☆:横棒グラフ(plot.barh)

plot.barhを使うことで横棒グラフを作成することができます

棒グラフのbarに、横という意味のhorizontalhを付けたものがplot.barhです

df[['平均気温','最高気温','最低気温']].mean().plot.barh()
Python/matplotlibの横棒グラフ

plot.barではなくplot.barhを使う状況は日本語が見やすいかどうかです

基本的には縦棒グラフを使い、項目が読みにくい場合は横棒グラフを使いましょう


こちらも複数項目可視化が可能です

df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.barh()
Python/matplotlibの複数項目の横棒グラフ

上記同様に積み上げグラフにするには、stackedパラメータを「True」で設定しましょう

df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.barh(stacked=True)
Python/matplotlibの複数項目の積み上げ横棒グラフ

★☆☆:ヒストグラム(plot.hist)

plot.histを使うとヒストグラムを作成することができます

ヒストグラムはデータの個数をY軸に取るグラフで、事前処理は必要ありません

df['平均気温'].plot.hist()
Python/matplotlibのヒストグラム

ヒストグラムも複数項目をプロットすることができます

df[['最高気温','最低気温']].plot.hist()
Python/matplotlibの複数項目のヒストグラム

ヒストグラムは性質上、データが重なることが多いため少し見にくくなってしまいます

そこでalphaパラメータを調整して透明度を上げましょう

「0~1」の間の数値を記載します

df[['最高気温','最低気温']].plot.hist(alpha=0.5)
Python/matplotlibの複数項目のヒストグラム

ヒストグラムのデータ数(ビン)を調整するには、パラメータbinsを利用します

設定する数が多ければ多いほど、棒グラフが多くなります

df[['最高気温','最低気温']].plot.hist(alpha=0.7, bins=50)
Python/matplotlibの複数項目ヒストグラム

★☆☆:面グラフ(plot.area)

plot.areaで面グラフを作成することができます

df['平均気温'].plot.area()
Python/matplotlibの面グラフ

複数のデータを積み上げて可視化できます

マイナスのデータがあるとエラーになるので注意してください

df[['最高気温','平均気温']].plot.area()
Python/matplotlibの複数項目の積み上げ面グラフ

stackedのパラメータを「False」と設定することで、面グラフを重ねて表を作ることができます

※この場合はマイナスのデータがあっても大丈夫

df[['最高気温','最低気温']].plot.area(stacked=False)
Python/matplotlibの複数項目の面グラフ

★★☆:散布図(plot.scatter)

plot.scatter散布図を作成することができます

他のplot系のグラフと違い、パラメータとしてx軸やy軸などを指定する必要があります

df.plot.scatter(x='最高気温', y='最低気温')
Python/matplotlibの散布図
気温データのイメージ

複数項目を同じ散布図にプロットすることもできます

ただし少し複雑になるので注意してください

1つ目の散布図を作り「ax」という変数に格納した後

2つ目の散布図でパラメータのaxとして指定します

ax = df.query('月==[1,2,3]').plot.scatter(x='最高気温', y='最低気温', color='blue', label='1-3月')
df.query('月==[4,5,6]').plot.scatter(x='最高気温', y='最低気温', color='red', label='4-6月', ax=ax)

colorやラベルlabelを付けるとキレイに散布図を作成できます

queryを使って1-3月と4-6月の気温をプロットします

Python/matplotlibの複数項目の散布図

プロットの大きさを指定することで、散布図をバブルプロットにすることができます

パラメータのサイズs平均気温のデータで指定します

df.plot.scatter(x='最高気温', y='最低気温', s='平均気温')
Python/matplotlibのバブルプロット

★★☆:円グラフ(plot.pie)

plot.pieで円グラフを作成することができます

df[['最高気温','最低気温']].mean().plot.pie()
Python/matplotlibの円グラフ
最低気温と最高気温のイメージ

角度データラベルを修正します

startangleで円グラフの角度を変更します(90に設定)

autopctで項目のパーセンテージを表示(’%1.1f%%’を記載)

labelでグラフ横のラベルを変更(空白に設定)

df[['最高気温','最低気温']].mean().plot.pie(startangle=90, autopct='%1.1f%%', label='')
Python/matplotlibの円グラフ

★☆☆:箱ひげ図(plot.box)

普段そこまで利用頻度は高くないですが、箱ひげ図も作成することができます

plot.boxを使います(英語で箱ひげ図はbox plotと言います)

df[['最高気温','最低気温']].plot.box()
Python/matplotlibの箱ひげ図

共通パラメータ

カラー(color)

colorで色を変更することができます

複数項目の場合は( )カッコでそれぞれ記載します

df.plot.hist(color=('tomato','skyblue'))
df.plot.hist(color=('darkred','navy'))
df.plot.hist(color=('darkorange','limegreen'))
df.plot.hist(color=('silver','gray'))
matplotlibのcolor設定

グラフサイズ(figsize)

figsizeでグラフのサイズを設定することができます

(横のサイズ,縦サイズ)の順で記入しましょう

df.plot.hist(figsize=(2,4))  #縦長
df.plot.hist(figsize=(4,4))  #正方形
df.plot.hist(figsize=(12,4)) #横長
matplotlibのfigsize設定

グラフの種類

本記事ではplotに続けてグラフの種類(bar/hist/scatterなど)を記入する方法をご紹介してきました

一方でkindというパラメータでグラフの種類を指定することができます

2つの記述方法は、最終的にはグラフは同じになります

df['平均気温'].plot.hist()
df['平均気温'].plot(kind='hist') #上と同じ結果

まとめ

今回はmatplotlibを使ってグラフを作成する方法をご紹介してきました

非常に簡単に記述することができるので、ぜひ覚えて使ってみてください

またもう一段階キレイなグラフであるseabornを使いたい場合はこちらです

【Python】seabornで綺麗なグラフ作成を!たった1行で書けます
お気に入り登録お願いします

2 COMMENTS

編集長

コメントありがとうございます。
labelというパラメータを空白(”)に設定すると、Noneのラベルを消すことができます。
plot.pie(startangle=90,autopct='%1.1f%%', label='')

返信する

コメントを残す

メールアドレスが公開されることはありません。