📑

Matpotlibで棒・円グラフ・散布図

2023/06/01に公開

Matplotlibを動かす2

こんにちは、わいわわです!
前回はまずシンプルなグラフをMatplotlibで作成しました。
https://zenn.dev/waiwawaiwai/articles/d4210fbf37e4d3
今回は少し発展して、
・散布図
・棒グラフ
・円グラフ
を作成していきます、どれも実用的!

散布図

plot()の引数としてmarkerオプションで指定できます。
x値とy値が交わるところ(交点)にマーカーを表示できます。

  • axis()...散布図を作成する際にx軸とy軸のスケールを指定することで、
    データの分布をグラフ中心部に集中させたり、
    逆に散開させるなど見せ方を変えることができる
    pyplot.axis([xの最小値,xの最大値,yの最小値,yの最大値])
    のようにリストの要素としてx、y軸の最小値と最大値の順で指定する!

実際に作成

import matplotlib.pyplot as plt
plt.plot(
    [1,2,3,4,5,6,7,8],
    [2,4,6,8,10,12,14,16],
    marker='o',
    linestyle='None')
plt.axis([
    0,
    10,
    0,
    20])
plt.show()

!出力結果!

markerオプションは他にも
. 普通の点
S 四角形
D ダイヤモンド
V 下向きの三角形
など、様々あります!

棒グラフ

つづいては棒グラフです。
棒グラフはbar()関数を使用し、
heightオプションで高さを設定し、xの値でバーの並び順を指定して描画します。
また、widthオプションで太さを指定したり、colorで色も指定できます!

実際に作成

import matplotlib.pyplot as plt
y = [15,30,45,10,5]
x = [1,2,3,4,5]
label = [
    'Apple','Banana','Orange','Grape','Strawberry']
plt.bar(
    x = x,
    height = y,
    tick_label=label
)
plt.title('Sales')
plt.xlabel('Fruit')
plt.ylabel('amount of sales')
plt.show()

!出力結果!

yはバーの高さ(検証データ)ですが、xは今回は並び順です。
また、labelでそれぞれに名前をつけています。
bar()関数で高さをyの値にし、x順に並べるよう指示しています。
あとはタイトルや軸それぞれのラベルを記述しています!

バーの隙間をなくすには

bar()の幅を設定するwidthはデフォルトで0.8(全体を1としたときの割合)になっています。
そのため、隣とのバーに余白ができる仕様というイメージです。
これを1.0に設定できれば余白はなくなります。
width=1.0
逆に0.8より細く指定すれば細くなる、ということですね!

円グラフ

最後は円グラフです。
円グラフはpie()関数でプロットします。
こちらも多種多様なオプションがあります、代表的なものを記載します。

  • colors...グラフ要素のカラーを指定する値のリスト
  • autopct...構成割合をパーセンテージで表示
  • radius...円の半径、デフォルト値は1
    などなど

実際に作成

import matplotlib.pyplot as plt
values = [100,200,300,400,500]
labels = ['Apple','Banana','Grape','Orange','Pineapple']

plt.pie(
    x = values,
    labels=labels,
    autopct='%.2f%%')
plt.axis('equal')
plt.show()

!出力結果!

数値とラベルを定義し、指定。
autopct='%.2f%%'では小数点第2まで表示することを指示しています。
また、普通に出力してしまうと縦につぶれた楕円形になってしまうため、
axis('equal')で円がつぶれないよう、形を指示しています。
equalはx軸とy軸の比率が等しい、というイメージです!

また、今回の円グラフの描画はスタートの位置も微妙な位置で、かつ反時計回りという
なんとも見にくい円グラフになっています。
startangle=90...で90度の位置から
counterclock=False...で時計回りに描画
することでよく見る見やすい円グラフが作成できます!

特定の要素を切り出して目立たせる

また、特定の要素を切り出すオプションもあります。
explodeは各要素を円の中心から切り離す距離を指定するためのオプションです。

import matplotlib.pyplot as plt
values = [100,200,300,400,500]
labels = ['Apple','Banana','Grape','Orange','Pineapple']

plt.pie(
    x = values,
    labels=labels,
    autopct='%.2f%%',
    explode=[0.3,0,0,0,0]
    )
plt.axis('equal')
plt.show()

!出力結果!

要素が5つあるのに対して、最初の要素のみ距離を0.3としています。
そのため、Appleが浮くんですね!
強調したい時などは非常に良いです。

所感

前回と今回でMatplotlibを使い、様々なグラフを描いてきました。
営業時代エクセルを使っていたころは2つのグラフを掛け合わせたような
グラフも作成していたので、そのようなグラフの出力も学びたいところです。
引き続き学習、がんばります!

Discussion