Python には多くのデータ可視化ライブラリがありますが、Matplotlib はその中でも最も人気のあるライブラリです。Matplotlib の人気の理由はその信頼性と実用性にあり、少ないコードでシンプルなプロットから複雑なプロットまで作成することができます。また、プロットは様々な方法でカスタマイズすることができます。
このチュートリアルでは、Matplotlib で円グラフをプロットする方法を説明します。
円グラフは、データをカテゴリやラベルに分解して表現します。円グラフは、パーセントなどの比例データを視覚化する直感的でシンプルな方法です。
>
Matplotlib で円グラフをプロットする
Matplotlib で円グラフを描画するには、PyPlot または Axes
インスタンスの pie()
関数を呼び出します。
唯一の必須引数は、データセットからの特徴量のような、プロットしたいデータです。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
fig, ax = plt.subplots()
ax.plot(x)
plt.show()
これは、各値がパイの中で割合的に大きなスライスに割り当てられた、かなりシンプルで、しかし平凡な円グラフを生成します。
ここで何が何だかわかりやすくするために、ラベルを追加してみましょう。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
fig, ax = plt.subplots()
ax.pie(x, labels = labels)
ax.set_title('Survery responses')
plt.show()
これで、円グラフにいくつかのデータが追加され、解釈が容易になります。
Matplotlib による円グラフのカスタマイズ
プレゼンテーションや論文のためにデータの可視化を準備するとき、あるいは単に仲間と共有するとき – カテゴリに関連する異なる色を使用したり、視覚的な認識だけに頼らずスライスでパーセンテージを表示したり、スライスを爆発させて強調したりと、少し様式化してカスタマイズしたいと思うかもしれません。
それでは、Matplotlib で円グラフをカスタマイズする方法を見てみましょう。
円グラフの色を変更する
Matplotlib で円グラフの色を変更するには、プロット時に colors
引数に色の配列を指定する必要があります。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors)
ax.set_title('Survery responses')
plt.show()
ここでは、回答とそれに割り当てられた色の間に実に単純な相関関係を作りました。Tableau のパレットでは、とても可能性が高い
は 青
になり、とても可能性が低い
は 赤
になります。
このコードを実行すると、次のようになります。
スライスにパーセンテージを表示する
ここまでで作成した円グラフを見ると、「わからない」と「可能性がある」の回答者が他のカテゴリーよりも多いことがわかります。しかし、円グラフを視覚的に、そして数値的に解釈することは簡単な場合があります。
各スライスに数値のパーセンテージを追加するには、 autopct
引数を使用します。これは各ウェッジ/スライスのパーセンテージを自動的に設定し、標準的なPythonの文字列フォーマット表記を受け付けます。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors, autopct='%.0f%%')
ax.set_title('Survery responses')
plt.show()
autopctを
%.0f%%に設定することで、小数点以下0桁のパーセンテージ(整数値のみ)を選択し、最後に
%記号を追加しています。もし、周囲の
%..%` 記号を省略したら、文字列はパーセントではなく、リテラル値としてフォーマットされるでしょう。
このコードを実行すると、次のようになります。
エクスプロード/ハイライトウェッジ
時には、特定のエントリーを強調することが重要な場合があります。例えば、私たちのアンケートで、回答者のごく一部が、問題の何かの出現が「とてもありそうにない」と感じているとします。ほとんどの人が可能性が低いと思っていないという事実を指摘したいと仮定すると、ウェッジを爆発させることができます。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]
fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors, autopct='%.0f%%', explode = explode)
ax.set_title('Survery responses')
plt.show()
引数 explode
は 0..1
の値の配列を受け付けます。この値自体が、くさびが中心からどれだけ離れているかを定義します。デフォルトでは、すべてのウェッジは 0
の explode 値を持ち、すべてのウェッジは中心に接続されています。
この値を 1
に設定すると、チャートに対して大きくオフセットされるので、通常は 0.1
, 0.2
, 0.3
, および同様の値でウェッジを爆発させることになるでしょう。異なるカテゴリーを強調するために異なる値で、好きなだけそれらを爆発させることができます。
このコードを実行すると、次のようになります。
シャドウの追加
Matplotlib の円グラフに影を付けるには、引数 shadow
を True
に設定するだけです。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]
fig, ax = plt.subplots()
ax.pie(x, labels = labels,
colors = colors,
autopct='%.0f%%',
explode = explode,
shadow = True)
ax.set_title('Survery responses')
plt.show()
この結果、以下のようになります。
円グラフを回転させる
最後に、開始角度を設定することで、グラフを回転させることができます。今のところ、0度(右回り)から始まり、反時計回りに楔が生成されます。引数 startangle
に 0..360
の間の数値を設定することで、完全な円形にすることができます。
import matplotlib.pyplot as plt
x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]
fig, ax = plt.subplots()
ax.pie(x, labels = labels,
colors = colors,
autopct='%.0f%%',
explode = explode,
shadow = True,
startangle = 180)
ax.set_title('Survery responses')
plt.show()
これは、円グラフを180度回転させたもので、事実上、反対側に反転しています。
結論
このチュートリアルでは、Python を使って Matplotlib でシンプルな円グラフをプロットする方法を説明しました。単純な円グラフを説明した後、美観と実用性のために円グラフをカスタマイズする方法について説明しました。
もしあなたがデータ可視化に興味があり、何から始めたらいいかわからない場合は、Pythonでデータ可視化に関する書籍の束をチェックしてみてください。
Pythonによるデータ可視化
データビジュアライゼーションで危険な存在になる
30日間無条件返金保証
初級から上級まで
定期的に無料で更新(最新更新は2021年4月)
ボーナスリソースやガイドを更新
Pythonでデータ可視化 MatplotlibとPandasは、Pythonの基礎知識を持つ全くの初心者が、PandasとMatplotlibを使って、単純なプロットからインタラクティブなボタンを持つアニメーションの3Dプロットまで、これらのライブラリで高度な作業をするための強力な基盤を構築できるように設計された書籍です。
本書は、Pythonの基本的な知識を持つ方を対象としています。
PandasとMatplotlibについて知っておく必要があることすべてを教えてくれる詳細なガイドです。
Pythonでデータ可視化」は、Pythonの初級~中級開発者向けの本で、Pandasを使った簡単なデータ操作から、MatplotlibやSeabornといったコアなプロットライブラリを取り上げ、Altairのような宣言的・実験的なライブラリの活用方法まで、幅広くガイドしています。具体的には、11章にわたって、9つのPythonライブラリを取り上げています。Pandas、Matplotlib、Seaborn、Bokeh、Altair、Plotly、GGPlot、GeoPandas、そしてVisPyです。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。